diff options
author | Jeff King <peff@peff.net> | 2019-04-05 20:13:56 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-04-16 09:58:21 +0200 |
commit | 4ecbd6492cde3fcf003c387414b3e9983fb2ba4b (patch) | |
tree | 818fd510da857e266133579f4e3c9c25a6d9040d /server-info.c | |
parent | server-info: simplify cleanup in parse_pack_def() (diff) | |
download | git-4ecbd6492cde3fcf003c387414b3e9983fb2ba4b.tar.xz git-4ecbd6492cde3fcf003c387414b3e9983fb2ba4b.zip |
server-info: use strbuf to read old info/packs file
This old code uses fgets with a fixed-size buffer. Let's use a strbuf
instead, so we don't have to wonder if "1000" is big enough, or what
happens if we see a long line.
This also lets us drop our custom code to trim the newline.
Probably nobody actually cares about the 1000-char limit (after all, the
lines generally only say "P pack-[0-9a-f]{40}.pack"), so this is mostly
just about cleanup/readability.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'server-info.c')
-rw-r--r-- | server-info.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/server-info.c b/server-info.c index ba44cece7f..d4115fecbb 100644 --- a/server-info.c +++ b/server-info.c @@ -131,7 +131,7 @@ static int parse_pack_def(const char *packname, int old_cnt) static int read_pack_info_file(const char *infofile) { FILE *fp; - char line[1000]; + struct strbuf line = STRBUF_INIT; int old_cnt = 0; int stale = 1; @@ -139,32 +139,30 @@ static int read_pack_info_file(const char *infofile) if (!fp) return 1; /* nonexistent is not an error. */ - while (fgets(line, sizeof(line), fp)) { + while (strbuf_getline(&line, fp) != EOF) { const char *arg; - int len = strlen(line); - if (len && line[len-1] == '\n') - line[--len] = 0; - if (!len) + if (!line.len) continue; - if (skip_prefix(line, "P ", &arg)) { + if (skip_prefix(line.buf, "P ", &arg)) { /* P name */ if (parse_pack_def(arg, old_cnt++)) goto out_stale; - } else if (line[0] == 'D') { + } else if (line.buf[0] == 'D') { /* we used to emit D but that was misguided. */ goto out_stale; - } else if (line[0] == 'T') { + } else if (line.buf[0] == 'T') { /* we used to emit T but nobody uses it. */ goto out_stale; } else { - error("unrecognized: %s", line); + error("unrecognized: %s", line.buf); } } stale = 0; out_stale: + strbuf_release(&line); fclose(fp); return stale; } |