X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=commit-tree.c;h=23de13361944ad7ba7c5320cf7cdd04e81842c60;hb=0a7668e99f513bd481ef6c4bc69995c434b91cb1;hp=c0b07f89286c3f6cceae8122b4c3142c8efaf8e1;hpb=c5bac17ad21c8e79fcca21c366832e75be095322;p=git.git diff --git a/commit-tree.c b/commit-tree.c index c0b07f89..23de1336 100644 --- a/commit-tree.c +++ b/commit-tree.c @@ -12,19 +12,14 @@ #include #define BLOCKING (1ul << 14) -#define ORIG_OFFSET (40) /* - * Leave space at the beginning to insert the tag - * once we know how big things are. - * * FIXME! Share the code with "write-tree.c" */ static void init_buffer(char **bufp, unsigned int *sizep) { - char *buf = malloc(BLOCKING); - memset(buf, 0, ORIG_OFFSET); - *sizep = ORIG_OFFSET; + char *buf = xmalloc(BLOCKING); + *sizep = 0; *bufp = buf; } @@ -45,41 +40,13 @@ static void add_buffer(char **bufp, unsigned int *sizep, const char *fmt, ...) buf = *bufp; if (newsize > alloc) { alloc = (newsize + 32767) & ~32767; - buf = realloc(buf, alloc); + buf = xrealloc(buf, alloc); *bufp = buf; } *sizep = newsize; memcpy(buf + size, one_line, len); } -static int prepend_integer(char *buffer, unsigned val, int i) -{ - buffer[--i] = '\0'; - do { - buffer[--i] = '0' + (val % 10); - val /= 10; - } while (val); - return i; -} - -static void finish_buffer(char *tag, char **bufp, unsigned int *sizep) -{ - int taglen; - int offset; - char *buf = *bufp; - unsigned int size = *sizep; - - offset = prepend_integer(buf, size - ORIG_OFFSET, ORIG_OFFSET); - taglen = strlen(tag); - offset -= taglen; - buf += offset; - size -= offset; - memcpy(buf, tag, taglen); - - *bufp = buf; - *sizep = size; -} - static void remove_special(char *p) { char c; @@ -355,9 +322,7 @@ int main(int argc, char **argv) while (fgets(comment, sizeof(comment), stdin) != NULL) add_buffer(&buffer, &size, "%s", comment); - finish_buffer("commit ", &buffer, &size); - - write_sha1_file(buffer, size, commit_sha1); + write_sha1_file(buffer, size, "commit", commit_sha1); printf("%s\n", sha1_to_hex(commit_sha1)); return 0; }