summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2010-11-19 18:54:45 -0600
committerJunio C Hamano <gitster@pobox.com>2010-11-24 14:53:58 -0800
commit6263c06d49abdf5e5defdf528c3ff67bf948ac9b (patch)
treece95a3dd2da9ef85b4c370df4aa0e62fc3c48cd8
parent2a48afe1c256db6273a4ff99eaddc5c18dc46ffd (diff)
downloadgit-6263c06d49abdf5e5defdf528c3ff67bf948ac9b.tar.gz
vcs-svn: Sharpen parsing of property lines
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>
-rw-r--r--vcs-svn/svndump.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c
index 5de8dadcdd..576d148e5e 100644
--- a/vcs-svn/svndump.c
+++ b/vcs-svn/svndump.c
@@ -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);
}
}
}