Use strbuf API in apply, blame, commit-tree and diff

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Pierre Habouzit
2007-09-06 13:20:09 +02:00
committed by Junio C Hamano
parent d52bc66152
commit af6eb82262
4 changed files with 43 additions and 107 deletions

View File

@ -12,6 +12,7 @@
#include "blob.h"
#include "delta.h"
#include "builtin.h"
#include "strbuf.h"
/*
* --check turns on checking that the working tree matches the
@ -181,34 +182,21 @@ static void say_patch_name(FILE *output, const char *pre, struct patch *patch, c
static void *read_patch_file(int fd, unsigned long *sizep)
{
unsigned long size = 0, alloc = CHUNKSIZE;
void *buffer = xmalloc(alloc);
struct strbuf buf;
for (;;) {
ssize_t nr = alloc - size;
if (nr < 1024) {
alloc += CHUNKSIZE;
buffer = xrealloc(buffer, alloc);
nr = alloc - size;
}
nr = xread(fd, (char *) buffer + size, nr);
if (!nr)
break;
if (nr < 0)
die("git-apply: read returned %s", strerror(errno));
size += nr;
}
*sizep = size;
strbuf_init(&buf);
if (strbuf_read(&buf, fd) < 0)
die("git-apply: read returned %s", strerror(errno));
*sizep = buf.len;
/*
* Make sure that we have some slop in the buffer
* so that we can do speculative "memcmp" etc, and
* see to it that it is NUL-filled.
*/
if (alloc < size + SLOP)
buffer = xrealloc(buffer, size + SLOP);
memset((char *) buffer + size, 0, SLOP);
return buffer;
strbuf_grow(&buf, SLOP);
memset(buf.buf + buf.len, 0, SLOP);
return strbuf_detach(&buf);
}
static unsigned long linelen(const char *buffer, unsigned long size)