From 6f32b4e4d1d451daed4ec519ee81ef37c8dc159e Mon Sep 17 00:00:00 2001 From: David Shaw Date: Thu, 28 Sep 2006 19:53:17 +0000 Subject: [PATCH] Move strsep() and ascii_isspace() to libcompat. --- ChangeLog | 5 ++++ configure.ac | 4 ++-- include/ChangeLog | 3 +++ include/compat.h | 8 +++++++ include/util.h | 7 ------ keyserver/gpgkeys_ldap.c | 2 +- util/ChangeLog | 2 ++ util/strgutil.c | 50 ---------------------------------------- util/strsep.c | 48 ++++++++++++++++++++++++++++++++++++++ 9 files changed, 69 insertions(+), 60 deletions(-) create mode 100644 util/strsep.c diff --git a/ChangeLog b/ChangeLog index 3533a2bc8..232c098b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-09-28 David Shaw + + * configure.ac: Move strsep to AC_REPLACE_FUNCS so it will end up + in libcompat. + 2006-08-01 Werner Koch Released 1.4.5. diff --git a/configure.ac b/configure.ac index 6f601843e..04ee87398 100644 --- a/configure.ac +++ b/configure.ac @@ -891,13 +891,13 @@ AC_CHECK_DECLS(getpagesize) AC_FUNC_FSEEKO AC_FUNC_VPRINTF AC_FUNC_FORK -AC_CHECK_FUNCS(strerror stpcpy strsep strlwr tcgetattr strtoul mmap) +AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr strtoul mmap) AC_CHECK_FUNCS(strcasecmp strncasecmp ctermid times unsetenv getpwnam getpwuid) AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime) AC_CHECK_FUNCS(atexit raise getpagesize strftime nl_langinfo setlocale) AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat getaddrinfo) AC_CHECK_FUNCS(fcntl ftruncate) -AC_REPLACE_FUNCS(mkdtemp timegm isascii memrchr) +AC_REPLACE_FUNCS(mkdtemp timegm isascii memrchr strsep) AC_CHECK_TYPES([struct sigaction, sigset_t],,,[#include ]) diff --git a/include/ChangeLog b/include/ChangeLog index 0d72a879a..c2fdcb140 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,5 +1,8 @@ 2006-09-28 David Shaw + * compat.h: Move strsep prototype and ascii_isspace macro to from + util.h. + * compat.h: New, used for libcompat.a functions. * util.h: Includes compat.h. diff --git a/include/compat.h b/include/compat.h index c1f900a9e..f971ffaf7 100644 --- a/include/compat.h +++ b/include/compat.h @@ -1,6 +1,14 @@ #ifndef _COMPAT_H_ #define _COMPAT_H_ +/* Note this isn't identical to a C locale isspace() without \f and + \v, but works for the purposes used here. */ +#define ascii_isspace(a) ((a)==' ' || (a)=='\n' || (a)=='\r' || (a)=='\t') + int hextobyte( const char *s ); +#ifndef HAVE_STRSEP +char *strsep (char **stringp, const char *delim); +#endif + #endif /* !_COMPAT_H_ */ diff --git a/include/util.h b/include/util.h index 559d0b9a0..265bb02c2 100644 --- a/include/util.h +++ b/include/util.h @@ -206,9 +206,6 @@ char *stpcpy(char *a,const char *b); #ifndef HAVE_STRLWR char *strlwr(char *a); #endif -#ifndef HAVE_STRSEP -char *strsep (char **stringp, const char *delim); -#endif #ifndef HAVE_STRCASECMP int strcasecmp( const char *, const char *b); #endif @@ -297,10 +294,6 @@ int get_cert(const char *name,size_t max_size,IOBUF *iobuf, *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10)) #define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1)) -/* Note this isn't identical to a C locale isspace() without \f and - \v, but works for the purposes used here. */ -#define ascii_isspace(a) ((a)==' ' || (a)=='\n' || (a)=='\r' || (a)=='\t') - /******* RISC OS stuff ***********/ #ifdef __riscos__ int riscos_load_module(const char *name, const char * const path[], int fatal); diff --git a/keyserver/gpgkeys_ldap.c b/keyserver/gpgkeys_ldap.c index cdafe7fa7..1cc27f452 100644 --- a/keyserver/gpgkeys_ldap.c +++ b/keyserver/gpgkeys_ldap.c @@ -54,7 +54,7 @@ #include #endif -#include "util.h" +#include "compat.h" #include "keyserver.h" #include "ksutil.h" diff --git a/util/ChangeLog b/util/ChangeLog index 671b51bb0..df84c9112 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,5 +1,7 @@ 2006-09-28 David Shaw + * strgutil.c (strsep): Move to strsep.c for AC_REPLACE_FUNCS. + * Makefile.am: Build libcompat.a for keyserver helpers. libutil.a always contains everything in libcompat.a, so we only need to link to one or the other. diff --git a/util/strgutil.c b/util/strgutil.c index cffdfcf77..95cb0f274 100644 --- a/util/strgutil.c +++ b/util/strgutil.c @@ -1158,56 +1158,6 @@ stpcpy(char *a,const char *b) } #endif - -#ifndef HAVE_STRSEP -/* code taken from glibc-2.2.1/sysdeps/generic/strsep.c */ -char * -strsep (char **stringp, const char *delim) -{ - char *begin, *end; - - begin = *stringp; - if (begin == NULL) - return NULL; - - /* A frequent case is when the delimiter string contains only one - character. Here we don't need to call the expensive `strpbrk' - function and instead work using `strchr'. */ - if (delim[0] == '\0' || delim[1] == '\0') - { - char ch = delim[0]; - - if (ch == '\0') - end = NULL; - else - { - if (*begin == ch) - end = begin; - else if (*begin == '\0') - end = NULL; - else - end = strchr (begin + 1, ch); - } - } - else - /* Find the end of the token. */ - end = strpbrk (begin, delim); - - if (end) - { - /* Terminate the token and set *STRINGP past NUL character. */ - *end++ = '\0'; - *stringp = end; - } - else - /* No more delimiters; this is the last token. */ - *stringp = NULL; - - return begin; -} -#endif /*HAVE_STRSEP*/ - - #ifndef HAVE_STRLWR char * strlwr(char *s) diff --git a/util/strsep.c b/util/strsep.c new file mode 100644 index 000000000..b97945f78 --- /dev/null +++ b/util/strsep.c @@ -0,0 +1,48 @@ +#include +#include + +/* code taken from glibc-2.2.1/sysdeps/generic/strsep.c */ +char * +strsep2 (char **stringp, const char *delim) +{ + char *begin, *end; + + begin = *stringp; + if (begin == NULL) + return NULL; + + /* A frequent case is when the delimiter string contains only one + character. Here we don't need to call the expensive `strpbrk' + function and instead work using `strchr'. */ + if (delim[0] == '\0' || delim[1] == '\0') + { + char ch = delim[0]; + + if (ch == '\0') + end = NULL; + else + { + if (*begin == ch) + end = begin; + else if (*begin == '\0') + end = NULL; + else + end = strchr (begin + 1, ch); + } + } + else + /* Find the end of the token. */ + end = strpbrk (begin, delim); + + if (end) + { + /* Terminate the token and set *STRINGP past NUL character. */ + *end++ = '\0'; + *stringp = end; + } + else + /* No more delimiters; this is the last token. */ + *stringp = NULL; + + return begin; +}