combine-diff: move the code to parse hunk-header into common library.
authorJunio C Hamano <junkio@cox.net>
Wed, 5 Apr 2006 19:22:35 +0000 (12:22 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 5 Apr 2006 19:22:35 +0000 (12:22 -0700)
Signed-off-by: Junio C Hamano <junkio@cox.net>
combine-diff.c
xdiff-interface.c
xdiff-interface.h

index e17afd1..4657eb4 100644 (file)
@@ -111,52 +111,6 @@ static char *grab_blob(const unsigned char *sha1, unsigned long *size)
        return blob;
 }
 
-static int parse_num(char **cp_p, unsigned int *num_p)
-{
-       char *cp = *cp_p;
-       unsigned int num = 0;
-       int read_some;
-
-       while ('0' <= *cp && *cp <= '9')
-               num = num * 10 + *cp++ - '0';
-       if (!(read_some = cp - *cp_p))
-               return -1;
-       *cp_p = cp;
-       *num_p = num;
-       return 0;
-}
-
-static int parse_hunk_header(char *line, int len,
-                            unsigned int *ob, unsigned int *on,
-                            unsigned int *nb, unsigned int *nn)
-{
-       char *cp;
-       cp = line + 4;
-       if (parse_num(&cp, ob)) {
-       bad_line:
-               return error("malformed diff output: %s", line);
-       }
-       if (*cp == ',') {
-               cp++;
-               if (parse_num(&cp, on))
-                       goto bad_line;
-       }
-       else
-               *on = 1;
-       if (*cp++ != ' ' || *cp++ != '+')
-               goto bad_line;
-       if (parse_num(&cp, nb))
-               goto bad_line;
-       if (*cp == ',') {
-               cp++;
-               if (parse_num(&cp, nn))
-                       goto bad_line;
-       }
-       else
-               *nn = 1;
-       return -!!memcmp(cp, " @@", 3);
-}
-
 static void append_lost(struct sline *sline, int n, const char *line, int len)
 {
        struct lline *lline;
index 0a66ded..f7d6f98 100644 (file)
@@ -1,6 +1,52 @@
 #include "cache.h"
 #include "xdiff-interface.h"
 
+static int parse_num(char **cp_p, unsigned int *num_p)
+{
+       char *cp = *cp_p;
+       unsigned int num = 0;
+       int read_some;
+
+       while ('0' <= *cp && *cp <= '9')
+               num = num * 10 + *cp++ - '0';
+       if (!(read_some = cp - *cp_p))
+               return -1;
+       *cp_p = cp;
+       *num_p = num;
+       return 0;
+}
+
+int parse_hunk_header(char *line, int len,
+                     unsigned int *ob, unsigned int *on,
+                     unsigned int *nb, unsigned int *nn)
+{
+       char *cp;
+       cp = line + 4;
+       if (parse_num(&cp, ob)) {
+       bad_line:
+               return error("malformed diff output: %s", line);
+       }
+       if (*cp == ',') {
+               cp++;
+               if (parse_num(&cp, on))
+                       goto bad_line;
+       }
+       else
+               *on = 1;
+       if (*cp++ != ' ' || *cp++ != '+')
+               goto bad_line;
+       if (parse_num(&cp, nb))
+               goto bad_line;
+       if (*cp == ',') {
+               cp++;
+               if (parse_num(&cp, nn))
+                       goto bad_line;
+       }
+       else
+               *nn = 1;
+       return -!!memcmp(cp, " @@", 3);
+}
+
 static void consume_one(void *priv_, char *s, unsigned long size)
 {
        struct xdiff_emit_state *priv = priv_;
index e2f0d66..ec682a2 100644 (file)
@@ -14,5 +14,8 @@ struct xdiff_emit_state {
 };
 
 int xdiff_outf(void *priv_, mmbuffer_t *mb, int nbuf);
+int parse_hunk_header(char *line, int len,
+                     unsigned int *ob, unsigned int *on,
+                     unsigned int *nb, unsigned int *nn);
 
 #endif