Ver código fonte

Create lub_string_decode() function to unescape strings.

git-svn-id: https://klish.googlecode.com/svn/trunk@196 0eaa4687-2ee9-07dd-09d9-bcdd2d2dd5fb
Serj Kalichev 13 anos atrás
pai
commit
a3514eb1c4
4 arquivos alterados com 30 adições e 21 exclusões
  1. 11 4
      Makefile.in
  2. 1 16
      lub/argv/argv_new.c
  3. 16 0
      lub/string.h
  4. 2 1
      lub/string/module.am

+ 11 - 4
Makefile.in

@@ -319,8 +319,8 @@ am__liblub_la_SOURCES_DIST = lub/argv/argv__get_arg.c \
 	lub/string/string_catn.c lub/string/string_dup.c \
 	lub/string/string_dupn.c lub/string/string_free.c \
 	lub/string/string_nocasecmp.c lub/string/string_nocasestr.c \
-	lub/string/string_suffix.c lub/string/private.h \
-	lub/test/test.c
+	lub/string/string_suffix.c lub/string/string_escape.c \
+	lub/string/private.h lub/test/test.c
 @LUBHEAP_TRUE@am__objects_1 = lub/heap/cache.lo \
 @LUBHEAP_TRUE@	lub/heap/cache_bucket.lo lub/heap/context.lo \
 @LUBHEAP_TRUE@	lub/heap/heap__get_max_free.lo \
@@ -409,7 +409,8 @@ am_liblub_la_OBJECTS = lub/argv/argv__get_arg.lo \
 	lub/string/string_catn.lo lub/string/string_dup.lo \
 	lub/string/string_dupn.lo lub/string/string_free.lo \
 	lub/string/string_nocasecmp.lo lub/string/string_nocasestr.lo \
-	lub/string/string_suffix.lo lub/test/test.lo
+	lub/string/string_suffix.lo lub/string/string_escape.lo \
+	lub/test/test.lo
 liblub_la_OBJECTS = $(am_liblub_la_OBJECTS)
 liblubheap_la_LIBADD =
 am__liblubheap_la_SOURCES_DIST = lubheap/posix/sysheap.c
@@ -817,7 +818,8 @@ liblub_la_SOURCES = lub/argv/argv__get_arg.c lub/argv/argv__get_argv.c \
 	lub/string/string_dup.c lub/string/string_dupn.c \
 	lub/string/string_free.c lub/string/string_nocasecmp.c \
 	lub/string/string_nocasestr.c lub/string/string_suffix.c \
-	lub/string/private.h lub/test/test.c
+	lub/string/string_escape.c lub/string/private.h \
+	lub/test/test.c
 liblub_la_LIBADD = -lpthread
 @LUBHEAP_TRUE@liblubheap_la_SOURCES = lubheap/posix/sysheap.c
 libtinyrl_la_SOURCES = tinyrl/tinyrl.c tinyrl/private.h \
@@ -1494,6 +1496,8 @@ lub/string/string_nocasestr.lo: lub/string/$(am__dirstamp) \
 	lub/string/$(DEPDIR)/$(am__dirstamp)
 lub/string/string_suffix.lo: lub/string/$(am__dirstamp) \
 	lub/string/$(DEPDIR)/$(am__dirstamp)
+lub/string/string_escape.lo: lub/string/$(am__dirstamp) \
+	lub/string/$(DEPDIR)/$(am__dirstamp)
 lub/test/$(am__dirstamp):
 	@$(MKDIR_P) lub/test
 	@: > lub/test/$(am__dirstamp)
@@ -1988,6 +1992,8 @@ mostlyclean-compile:
 	-rm -f lub/string/string_dup.lo
 	-rm -f lub/string/string_dupn.$(OBJEXT)
 	-rm -f lub/string/string_dupn.lo
+	-rm -f lub/string/string_escape.$(OBJEXT)
+	-rm -f lub/string/string_escape.lo
 	-rm -f lub/string/string_free.$(OBJEXT)
 	-rm -f lub/string/string_free.lo
 	-rm -f lub/string/string_nocasecmp.$(OBJEXT)
@@ -2187,6 +2193,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@lub/string/$(DEPDIR)/string_catn.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@lub/string/$(DEPDIR)/string_dup.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@lub/string/$(DEPDIR)/string_dupn.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lub/string/$(DEPDIR)/string_escape.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@lub/string/$(DEPDIR)/string_free.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@lub/string/$(DEPDIR)/string_nocasecmp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@lub/string/$(DEPDIR)/string_nocasestr.Plo@am__quote@

+ 1 - 16
lub/argv/argv_new.c

@@ -7,21 +7,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-/*--------------------------------------------------------- */
-static char * unescape_special_chars(const char *str)
-{
-    char *res = NULL;
-    char *s = NULL;
-
-    for (s = strchr(str, '\\'); s; s = strchr(str, '\\')) {
-        lub_string_catn(&res, str, s - str);
-        str = s + 1;
-    }
-    lub_string_cat(&res, str);
-
-    return res;
-}
-
 /*--------------------------------------------------------- */
 static void
 lub_argv_init(lub_argv_t *this,
@@ -47,7 +32,7 @@ lub_argv_init(lub_argv_t *this,
             word = lub_argv_nextword(word+len,&len,&offset,&quoted))
         {
             char * tmp = lub_string_dupn(word,len);
-            (*arg).arg = unescape_special_chars(tmp);
+            (*arg).arg = lub_string_decode(tmp);
             lub_string_free(tmp);
             (*arg).offset = offset;
             (*arg).quoted = quoted;

+ 16 - 0
lub/string.h

@@ -236,6 +236,22 @@ void
         char *string
     );
 
+/**
+ * This operation decode the escaped string.
+ *
+ * \pre 
+ * - none
+ * 
+ * \return
+ * - The allocated string without escapes.
+ *
+ * \post 
+ * - The result string must be freed after using.
+ */
+char *
+    lub_string_decode(const char *string);
+
+
  _END_C_DECL
 
 #endif /* _lub_string_h */

+ 2 - 1
lub/string/module.am

@@ -6,5 +6,6 @@ liblub_la_SOURCES +=	lub/string/string_cat.c	\
 			lub/string/string_nocasecmp.c	\
 			lub/string/string_nocasestr.c	\
 			lub/string/string_suffix.c	\
+			lub/string/string_escape.c	\
 			lub/string/private.h
-	
+