From 9b41669f0b121c854aa3ad65d2ab99b87ed1cf62 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Wed, 25 Jun 2008 19:36:50 +0200 Subject: [PATCH] Introduced new header "lib/string.h". Started moving string functions from lib.h there. The first ones are those from string.c. Also split off the unescaping functions to str-esc.c. --- lib/Makefile | 5 +-- lib/conf-input.c | 1 + lib/lib.h | 5 --- lib/shell/config.c | 1 + lib/str-esc.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++ lib/string.c | 63 +------------------------------------- lib/string.h | 17 +++++++++++ 7 files changed, 99 insertions(+), 69 deletions(-) create mode 100644 lib/str-esc.c create mode 100644 lib/string.h diff --git a/lib/Makefile b/lib/Makefile index 9efb1f69..e8db62e7 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -1,4 +1,4 @@ -# Makefile for the UCW Library (c) 1997--2007 Martin Mares +# Makefile for the UCW Library (c) 1997--2008 Martin Mares DIRS+=lib CONFIGS+=library @@ -31,7 +31,7 @@ LIBUCW_MODS= \ base64 base224 \ sync \ qache \ - string \ + string str-esc \ bbuf \ getopt @@ -40,6 +40,7 @@ LIBUCW_INCLUDES= \ mempool.h pagecache.h \ arraysort.h \ lists.h clists.h slists.h simple-lists.h \ + string.h \ unaligned.h prefetch.h \ bbuf.h gbuf.h bitarray.h bitsig.h \ hashfunc.h hashtable.h \ diff --git a/lib/conf-input.c b/lib/conf-input.c index c5d25277..08e5b098 100644 --- a/lib/conf-input.c +++ b/lib/conf-input.c @@ -15,6 +15,7 @@ #include "lib/mempool.h" #include "lib/fastbuf.h" #include "lib/chartype.h" +#include "lib/string.h" #include "lib/stkstring.h" #include diff --git a/lib/lib.h b/lib/lib.h index e93bdf6a..1ce5a463 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -263,11 +263,6 @@ void handle_signal(int signum); void unhandle_signal(int signum); sh_sighandler_t set_signal_handler(int signum, sh_sighandler_t new); -/* string.c */ - -char *str_unesc(char *dest, const char *src); -char *str_format_flags(char *dest, const char *fmt, uns flags); - /* bigalloc.c */ void *page_alloc(u64 len) LIKE_MALLOC; // allocates a multiple of CPU_PAGE_SIZE bytes with mmap diff --git a/lib/shell/config.c b/lib/shell/config.c index 4208b866..44ca4381 100644 --- a/lib/shell/config.c +++ b/lib/shell/config.c @@ -25,6 +25,7 @@ #include "lib/mempool.h" #include "lib/chartype.h" #include "lib/bbuf.h" +#include "lib/string.h" #include #include diff --git a/lib/str-esc.c b/lib/str-esc.c new file mode 100644 index 00000000..d2944389 --- /dev/null +++ b/lib/str-esc.c @@ -0,0 +1,76 @@ +/* + * UCW Library -- String Unescaping + * + * (c) 2006 Pavel Charvat + * (c) 2007 Martin Mares + * + * This software may be freely distributed and used according to the terms + * of the GNU Lesser General Public License. + */ + +#undef LOCAL_DEBUG + +#include "lib/lib.h" +#include "lib/string.h" +#include "lib/chartype.h" +#include + +/* Expands C99-like escape sequences. + * It is safe to use the same buffer for both input and output. */ +char * +str_unesc(char *d, const char *s) +{ + while (*s) + { + if (*s == '\\') + switch (s[1]) + { + case 'a': *d++ = '\a'; s += 2; break; + case 'b': *d++ = '\b'; s += 2; break; + case 'f': *d++ = '\f'; s += 2; break; + case 'n': *d++ = '\n'; s += 2; break; + case 'r': *d++ = '\r'; s += 2; break; + case 't': *d++ = '\t'; s += 2; break; + case 'v': *d++ = '\v'; s += 2; break; + case '\?': *d++ = '\?'; s += 2; break; + case '\'': *d++ = '\''; s += 2; break; + case '\"': *d++ = '\"'; s += 2; break; + case '\\': *d++ = '\\'; s += 2; break; + case 'x': + if (!Cxdigit(s[2])) + { + s++; + DBG("\\x used with no following hex digits"); + } + else + { + char *p; + uns v = strtoul(s + 2, &p, 16); + if (v <= 255) + *d++ = v; + else + DBG("hex escape sequence out of range"); + s = (char *)p; + } + break; + default: + if (s[1] >= '0' && s[1] <= '7') + { + uns v = s[1] - '0'; + s += 2; + for (uns i = 0; i < 2 && *s >= '0' && *s <= '7'; s++, i++) + v = (v << 3) + *s - '0'; + if (v <= 255) + *d++ = v; + else + DBG("octal escape sequence out of range"); + } + *d++ = *s++; + break; + } + else + *d++ = *s++; + } + *d = 0; + return d; +} diff --git a/lib/string.c b/lib/string.c index 602a7d73..28fe36ef 100644 --- a/lib/string.c +++ b/lib/string.c @@ -11,68 +11,7 @@ #undef LOCAL_DEBUG #include "lib/lib.h" -#include "lib/chartype.h" -#include - -/* Expands C99-like escape sequences. - * It is safe to use the same buffer for both input and output. */ -char * -str_unesc(char *d, const char *s) -{ - while (*s) - { - if (*s == '\\') - switch (s[1]) - { - case 'a': *d++ = '\a'; s += 2; break; - case 'b': *d++ = '\b'; s += 2; break; - case 'f': *d++ = '\f'; s += 2; break; - case 'n': *d++ = '\n'; s += 2; break; - case 'r': *d++ = '\r'; s += 2; break; - case 't': *d++ = '\t'; s += 2; break; - case 'v': *d++ = '\v'; s += 2; break; - case '\?': *d++ = '\?'; s += 2; break; - case '\'': *d++ = '\''; s += 2; break; - case '\"': *d++ = '\"'; s += 2; break; - case '\\': *d++ = '\\'; s += 2; break; - case 'x': - if (!Cxdigit(s[2])) - { - s++; - DBG("\\x used with no following hex digits"); - } - else - { - char *p; - uns v = strtoul(s + 2, &p, 16); - if (v <= 255) - *d++ = v; - else - DBG("hex escape sequence out of range"); - s = (char *)p; - } - break; - default: - if (s[1] >= '0' && s[1] <= '7') - { - uns v = s[1] - '0'; - s += 2; - for (uns i = 0; i < 2 && *s >= '0' && *s <= '7'; s++, i++) - v = (v << 3) + *s - '0'; - if (v <= 255) - *d++ = v; - else - DBG("octal escape sequence out of range"); - } - *d++ = *s++; - break; - } - else - *d++ = *s++; - } - *d = 0; - return d; -} +#include "lib/string.h" char * str_format_flags(char *dest, const char *fmt, uns flags) diff --git a/lib/string.h b/lib/string.h new file mode 100644 index 00000000..c60a14d0 --- /dev/null +++ b/lib/string.h @@ -0,0 +1,17 @@ +/* + * UCW Library -- String Routines + * + * (c) 2006 Pavel Charvat + * (c) 2007--2008 Martin Mares + * + * This software may be freely distributed and used according to the terms + * of the GNU Lesser General Public License. + */ + +#ifndef _UCW_STRING_H +#define _UCW_STRING_H + +char *str_unesc(char *dest, const char *src); +char *str_format_flags(char *dest, const char *fmt, uns flags); + +#endif -- 2.39.5