]> err.no Git - dpkg/commitdiff
libdpkg: Remove unneeded and wrong caching of namevalue length member
authorGuillem Jover <guillem@debian.org>
Wed, 2 Jul 2008 05:45:09 +0000 (08:45 +0300)
committerGuillem Jover <guillem@debian.org>
Wed, 2 Jul 2008 06:30:24 +0000 (09:30 +0300)
All current namevalue arrays have the length member precomputed. And
the code was sneakily casting from const to non-const through a memcpy
to be able to do the cache.

ChangeLog
lib/fields.c

index 9021adc7cda974b6c3e2ea57ce11c2a7b10379ca..762dbe203c2695d7bfd08257f7468118cb8f035f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-07-02  Guillem Jover  <guillem@debian.org>
+
+       * lib/fields.c (convert_string): Change nvip to be const and use a
+       proper assignment instead of a sneaky cast through memcpy. Remove
+       unneeded length caching as all current namevalue arrays have it
+       precomputed.
+
 2008-07-02  Guillem Jover  <guillem@debian.org>
 
        * lib/fields.c (convert_string): Use a capped string length instead
index 0ef20a84c26bd15bd1dd15062fc190dd5d9231c7..7e1abf068911d3a59b2ee28c89f7c9f9a719d22f 100644 (file)
@@ -38,19 +38,14 @@ convert_string(const char *filename, int lno, const char *what, int otherwise,
                const char **endpp)
 {
   const char *ep;
-  int c, l = 0;
-  struct namevalue *nvip= NULL;
-  memcpy(&nvip,&ivip,sizeof(struct namevalue *));
+  int c;
+  const struct namevalue *nvip = ivip;
 
   ep= startp;
   if (!*ep)
     parse_error(filename, lno, pigp, _("%s is missing"), what);
   while (nvip->name) {
-    if ((l= nvip->length) == 0) {
-      l= strlen(nvip->name);
-      nvip->length= (const int)l;
-    }
-    if (strncasecmp(nvip->name,startp,l) || nvip->name[l])
+    if (strncasecmp(nvip->name, startp, nvip->length))
       nvip++;
     else
       break;
@@ -60,7 +55,7 @@ convert_string(const char *filename, int lno, const char *what, int otherwise,
     parse_error(filename, lno, pigp, _("`%.*s' is not allowed for %s"),
                 strnlen(startp, 50), startp, what);
   }
-  ep = startp + l;
+  ep = startp + nvip->length;
   c = *ep;
   while (isspace(c)) c= *++ep;
   if (c && !endpp)