]> git.ipfire.org Git - thirdparty/git.git/commitdiff
server-info: use strbuf to read old info/packs file
authorJeff King <peff@peff.net>
Fri, 5 Apr 2019 18:13:56 +0000 (14:13 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 16 Apr 2019 07:58:21 +0000 (16:58 +0900)
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>
server-info.c

index ba44cece7f5fe62218060547a46de5d910926763..d4115fecbb81346622264dcca61d5260bfb59f41 100644 (file)
@@ -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;
 }