From a9b9420e9615f2581fb9d16325817effd1f35081 Mon Sep 17 00:00:00 2001 From: JD Horelick Date: Sun, 15 Jan 2012 06:12:51 -0500 Subject: [PATCH 1/2] Fix a macro variable name --- configure.ac | 2 +- src/main.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 69ecb9370..2c8df6972 100644 --- a/configure.ac +++ b/configure.ac @@ -14,7 +14,7 @@ PKG_CHECK_MODULES([PCRE], [libpcre]) CFLAGS="$CFLAGS $PCRE_CFLAGS -Wall -Wextra -std=c89 -D_GNU_SOURCE -g" LDFLAGS="$LDFLAGS" -AC_CHECK_DECL([PCRE_CONFIG_JIT], [AC_DEFINE([USE_PRCE_JIT], [], [Use PCRE JIT])], [], [#include ]) +AC_CHECK_DECL([PCRE_CONFIG_JIT], [AC_DEFINE([USE_PCRE_JIT], [], [Use PCRE JIT])], [], [#include ]) AC_CONFIG_FILES([Makefile]) AC_CONFIG_HEADERS([src/config.h]) diff --git a/src/main.c b/src/main.c index 67135de61..8be980e77 100644 --- a/src/main.c +++ b/src/main.c @@ -286,7 +286,7 @@ int main(int argc, char **argv) { exit(1); } -#ifdef USE_PRCE_JIT +#ifdef USE_PCRE_JIT int has_jit = 0; pcre_config(PCRE_CONFIG_JIT, &has_jit); if (has_jit) { From b1f0a4ee05d0d58661da764d17078ea5475e843a Mon Sep 17 00:00:00 2001 From: JD Horelick Date: Sun, 15 Jan 2012 16:48:40 -0500 Subject: [PATCH 2/2] Add ag_strl[cat|cpy] and use them in main.c in place of strn[cpy|cat]. They're a bit faster, less error-prone and have a far more useful return value than strn*. --- src/main.c | 12 ++++++------ src/util.c | 37 +++++++++++++++++++++++++++++++++++++ src/util.h | 2 ++ 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index 8be980e77..04cb6c7b0 100644 --- a/src/main.c +++ b/src/main.c @@ -57,9 +57,9 @@ int search_dir(const pcre *re, const pcre_extra *re_extra, const char* path, con dir = dir_list[i]; path_length = (size_t)(strlen(path) + strlen(dir->d_name) + 2); /* 2 for slash and null char */ dir_full_path = malloc(path_length); - dir_full_path = strncpy(dir_full_path, path, path_length); - dir_full_path = strncat(dir_full_path, "/", path_length); - dir_full_path = strncat(dir_full_path, dir->d_name, path_length); + ag_strlcpy(dir_full_path, path, path_length); + ag_strlcat(dir_full_path, "/", path_length); + ag_strlcat(dir_full_path, dir->d_name, path_length); load_ignore_patterns(dir_full_path); free(dir); dir = NULL; @@ -100,9 +100,9 @@ int search_dir(const pcre *re, const pcre_extra *re_extra, const char* path, con /* TODO: this is copy-pasted from about 30 lines above */ path_length = (size_t)(strlen(path) + strlen(dir->d_name) + 2); /* 2 for slash and null char */ dir_full_path = malloc(path_length); - dir_full_path = strncpy(dir_full_path, path, path_length); - dir_full_path = strncat(dir_full_path, "/", path_length); - dir_full_path = strncat(dir_full_path, dir->d_name, path_length); + ag_strlcpy(dir_full_path, path, path_length); + ag_strlcat(dir_full_path, "/", path_length); + ag_strlcat(dir_full_path, dir->d_name, path_length); log_debug("dir %s type %i", dir_full_path, dir->d_type); /* TODO: scan files in current dir before going deeper */ diff --git a/src/util.c b/src/util.c index c62962127..b9c3b5bf9 100644 --- a/src/util.c +++ b/src/util.c @@ -67,3 +67,40 @@ int is_binary(const void* buf, const int buf_len) { return(0); } + +/* + * These functions are taken from Linux. Renamed so there's no + * possible function name conflicts. + */ +size_t ag_strlcat(char *dest, const char *src, size_t count) +{ + size_t dsize = strlen(dest); + size_t len = strlen(src); + size_t res = dsize + len; + + dest += dsize; + count -= dsize; + + if (len >= count) + len = count - 1; + + memcpy(dest, src, len); + + dest[len] = 0; + + return res; +} + +size_t ag_strlcpy(char *dest, const char *src, size_t size) +{ + size_t ret = strlen(src); + + if (size) + { + size_t len = (ret >= size) ? size - 1 : ret; + memcpy(dest, src, len); + dest[len] = '\0'; + } + + return ret; +} diff --git a/src/util.h b/src/util.h index 6b1f837a0..51e43e29b 100644 --- a/src/util.h +++ b/src/util.h @@ -4,5 +4,7 @@ char* ag_strnstr(const char *s, const char *find, size_t slen); char* ag_strncasestr(const char *s, const char *find, size_t slen); int is_binary(const void* buf, const int buf_len); +size_t ag_strlcat(char *dest, const char *src, size_t size); +size_t ag_strlcpy(char *dest, const char *src, size_t size); #endif