]> git.draconx.ca Git - upkg.git/commitdiff
Implement parsing of old format name tables.
authorNick Bowler <nbowler@draconx.ca>
Sat, 6 Jun 2009 01:29:53 +0000 (21:29 -0400)
committerNick Bowler <nbowler@draconx.ca>
Mon, 8 Jun 2009 19:27:44 +0000 (15:27 -0400)
libupkg.c

index 85767a2e4262e96be5984655c99f8d1a338dfbb4..a9ddea07b1185afb2cf3597282fd1c4b18711928 100644 (file)
--- a/libupkg.c
+++ b/libupkg.c
@@ -134,13 +134,26 @@ static int pkg_init_names(struct upkg *pkg)
                                goto err;
                        memcpy(name->name, buf+1, len);
                        name->flags = unpack_32_le(buf+len+1);
+                       len += 4;
 
-                       nbuf -= len + 5;
-                       memmove(buf, buf+len+5, nbuf);
+                       nbuf -= len + 1;
+                       memmove(buf, buf+len+1, nbuf);
                        index++;
                } else {
-                       /* TODO */
-                       abort();
+                       char *c = memchr(buf, 0, nbuf);
+                       if (!c || nbuf <= c - buf + 5)
+                               goto err;
+                       len = c - buf + 1;
+                       name->name = malloc(len);
+                       if (!name->name)
+                               goto err;
+                       memcpy(name->name, buf, len);
+                       name->flags = unpack_32_le(buf+len);
+                       len += 4;
+
+                       nbuf -= len;
+                       memmove(buf, buf+len, nbuf);
+                       index++;
                }
        }