-# Makefile for the UCW Library (c) 1997--2007 Martin Mares <mj@ucw.cz>
+# Makefile for the UCW Library (c) 1997--2008 Martin Mares <mj@ucw.cz>
DIRS+=lib
CONFIGS+=library
base64 base224 \
sync \
qache \
- string \
+ string str-esc \
bbuf \
getopt
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 \
#include "lib/mempool.h"
#include "lib/fastbuf.h"
#include "lib/chartype.h"
+#include "lib/string.h"
#include "lib/stkstring.h"
#include <stdlib.h>
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
#include "lib/mempool.h"
#include "lib/chartype.h"
#include "lib/bbuf.h"
+#include "lib/string.h"
#include <stdlib.h>
#include <stdio.h>
--- /dev/null
+/*
+ * UCW Library -- String Unescaping
+ *
+ * (c) 2006 Pavel Charvat <pchar@ucw.cz>
+ * (c) 2007 Martin Mares <mj@ucw.cz>
+ *
+ * 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 <stdlib.h>
+
+/* 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;
+}
#undef LOCAL_DEBUG
#include "lib/lib.h"
-#include "lib/chartype.h"
-#include <stdlib.h>
-
-/* 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)
--- /dev/null
+/*
+ * UCW Library -- String Routines
+ *
+ * (c) 2006 Pavel Charvat <pchar@ucw.cz>
+ * (c) 2007--2008 Martin Mares <mj@ucw.cz>
+ *
+ * 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