]> err.no Git - dpkg/commitdiff
libdpkg: Refactor string format escaping
authorGuillem Jover <guillem@debian.org>
Sat, 28 Jun 2008 21:08:59 +0000 (00:08 +0300)
committerGuillem Jover <guillem@debian.org>
Sat, 28 Jun 2008 21:08:59 +0000 (00:08 +0300)
ChangeLog
lib/Makefile.am
lib/dpkg-priv.h
lib/parsehelp.c
lib/string.c [new file with mode: 0644]

index 191f69b9e7caaf7b2577fc079316591f0480bc4b..95b97800f2aa6d17e272eb0a3cc8b5d6bc1fc3b5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-06-29  Guillem Jover  <guillem@debian.org>
+
+       * lib/Makefile.am (libdpkg_a_SOURCES): Add 'string.c'.
+       * lib/dpkg-priv.h (str_escape_fmt): New prototype.
+       * lib/parsehelp.c: Include <dpkg-priv.h>.
+       (parseerr): Refactor string format escaping to ,,,
+       * lib/string.c (str_escape_fmt): ... here. New file.
+
 2008-06-28  Guillem Jover  <guillem@debian.org>
 
        * lib/parsedump.h (parseerr, parsemustfield): Remove unused 'file'
index 2a78ba4e7ffd30bb1c9991c300d7f31984386820..b452e1e36e846d2aecab3a408cb63e05fb99c13f 100644 (file)
@@ -38,6 +38,7 @@ libdpkg_a_SOURCES = \
        parsedump.h \
        path.c \
        showpkg.c \
+       string.c \
        subproc.c \
        tarfn.c tarfn.h \
        triglib.c \
index 9e690f15914ff3aef83feecbf33916b8139a2a5d..51af10c96e5dd601dec2b8772f2ac1332767dd8d 100644 (file)
@@ -32,6 +32,10 @@ extern "C" {
 #define sizeof_array(a) (sizeof(a) / sizeof((a)[0]))
 #endif
 
+/* String handling. */
+
+char *str_escape_fmt(char *dest, const char *src);
+
 /* Path handling. */
 
 size_t rtrim_slash_slashdot(char *path);
index 0623dbd7240903a03591dc9293098761627d7978..a311f73beec271f0bbf6e7a4db179beca6af790e 100644 (file)
@@ -26,6 +26,8 @@
 
 #include <dpkg.h>
 #include <dpkg-db.h>
+#include <dpkg-priv.h>
+
 #include "parsedump.h"
 
 void parseerr
@@ -47,7 +49,7 @@ void parseerr
     sprintf(buf2, _(" package `%.255s'"), pigp->name);
     strcat(buf1,buf2);
   }
-  for (p=buf1, q=buf2; *p; *q++= *p++) if (*p == '%') *q++= '%';
+  q = str_escape_fmt(buf2, buf1);
   strcpy(q,":\n "); strcat(q,fmt);
   va_start(al,fmt);
   if (!warnonly) ohshitv(buf2,al);
diff --git a/lib/string.c b/lib/string.c
new file mode 100644 (file)
index 0000000..dea49ac
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * libdpkg - Debian packaging suite library routines
+ * string.c - string handling routines
+ *
+ * Copyright © 1995 Ian Jackson <ian@chiark.greenend.org.uk>
+ * Copyright © 2008 Guillem Jover <guillem@debian.org>
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * This is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with dpkg; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+char *
+str_escape_fmt(char *dst, const char *src)
+{
+       char *d = dst;
+       const char *s = src;
+
+       while (*s) {
+               if (*s == '%')
+                       *d++ = '%';
+               *d++ = *s++;
+       }
+
+       *d = '\0';
+
+       return d;
+}
+