vcs-svn: Sharpen parsing of property lines
authorJonathan Nieder <jrnieder@gmail.com>
Sat, 20 Nov 2010 00:54:45 +0000 (18:54 -0600)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Nov 2010 22:53:58 +0000 (14:53 -0800)
Prepare to add a new type of property line (the 'D' line) to
handle property deltas.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
vcs-svn/svndump.c

index 5de8dadcddbdd6f6d462ae73ff9d9970f45d173a..576d148e5e8189d36726ffd977328d0125f1f4de 100644 (file)
@@ -134,21 +134,29 @@ static void handle_property(uint32_t key, const char *val, uint32_t len)
 
 static void read_props(void)
 {
-       uint32_t len;
        uint32_t key = ~0;
-       char *val = NULL;
-       char *t;
+       const char *t;
        while ((t = buffer_read_line()) && strcmp(t, "PROPS-END")) {
-               if (!strncmp(t, "K ", 2)) {
-                       len = atoi(&t[2]);
-                       key = pool_intern(buffer_read_string(len));
-                       buffer_read_line();
-               } else if (!strncmp(t, "V ", 2)) {
-                       len = atoi(&t[2]);
-                       val = buffer_read_string(len);
+               uint32_t len;
+               const char *val;
+               const char type = t[0];
+
+               if (!type || t[1] != ' ')
+                       die("invalid property line: %s\n", t);
+               len = atoi(&t[2]);
+               val = buffer_read_string(len);
+               buffer_skip_bytes(1);   /* Discard trailing newline. */
+
+               switch (type) {
+               case 'K':
+                       key = pool_intern(val);
+                       continue;
+               case 'V':
                        handle_property(key, val, len);
                        key = ~0;
-                       buffer_read_line();
+                       continue;
+               default:
+                       die("invalid property line: %s\n", t);
                }
        }
 }