Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
fast-import: Use strbuf API, and simplify cmd_data()
author
Pierre Habouzit
<madcoder@debian.org>
Thu, 6 Sep 2007 11:20:07 +0000
(13:20 +0200)
committer
Junio C Hamano
<gitster@pobox.com>
Fri, 7 Sep 2007 06:57:44 +0000
(23:57 -0700)
This patch features the use of strbuf_detach, and prevent the programmer
to mess with allocation directly. The code is as efficent as before, just
more concise and more straightforward.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fast-import.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
7a604f1
)
diff --git
a/fast-import.c
b/fast-import.c
index 2f7baf4917097a5a40a981f9e62818f43492004f..74ff0fdadd2d8c42191e5a52d68270c92288b528 100644
(file)
--- a/
fast-import.c
+++ b/
fast-import.c
@@
-340,7
+340,7
@@
static struct tag *last_tag;
/* Input stream parsing */
static whenspec_type whenspec = WHENSPEC_RAW;
/* Input stream parsing */
static whenspec_type whenspec = WHENSPEC_RAW;
-static struct strbuf command_buf;
+static struct strbuf command_buf
= STRBUF_INIT
;
static int unread_command_buf;
static struct recent_command cmd_hist = {&cmd_hist, &cmd_hist, NULL};
static struct recent_command *cmd_tail = &cmd_hist;
static int unread_command_buf;
static struct recent_command cmd_hist = {&cmd_hist, &cmd_hist, NULL};
static struct recent_command *cmd_tail = &cmd_hist;
@@
-1638,17
+1638,16
@@
static void cmd_mark(void)
static void *cmd_data (size_t *size)
{
static void *cmd_data (size_t *size)
{
- size_t length;
- char *buffer;
+ struct strbuf buffer;
+ strbuf_init(&buffer);
if (prefixcmp(command_buf.buf, "data "))
die("Expected 'data n' command, found: %s", command_buf.buf);
if (!prefixcmp(command_buf.buf + 5, "<<")) {
char *term = xstrdup(command_buf.buf + 5 + 2);
if (prefixcmp(command_buf.buf, "data "))
die("Expected 'data n' command, found: %s", command_buf.buf);
if (!prefixcmp(command_buf.buf + 5, "<<")) {
char *term = xstrdup(command_buf.buf + 5 + 2);
- size_t sz = 8192, term_len = command_buf.len - 5 - 2;
- length = 0;
- buffer = xmalloc(sz);
+ size_t term_len = command_buf.len - 5 - 2;
+
for (;;) {
read_line(&command_buf, stdin, '\n');
if (command_buf.eof)
for (;;) {
read_line(&command_buf, stdin, '\n');
if (command_buf.eof)
@@
-1656,21
+1655,18
@@
static void *cmd_data (size_t *size)
if (term_len == command_buf.len
&& !strcmp(term, command_buf.buf))
break;
if (term_len == command_buf.len
&& !strcmp(term, command_buf.buf))
break;
- ALLOC_GROW(buffer, length + command_buf.len + 1, sz);
- memcpy(buffer + length,
- command_buf.buf,
- command_buf.len);
- length += command_buf.len;
- buffer[length++] = '\n';
+ strbuf_addbuf(&buffer, &command_buf);
+ strbuf_addch(&buffer, '\n');
}
free(term);
}
else {
}
free(term);
}
else {
- size_t n = 0;
+ size_t n = 0, length;
+
length = strtoul(command_buf.buf + 5, NULL, 10);
length = strtoul(command_buf.buf + 5, NULL, 10);
- buffer = xmalloc(length);
+
while (n < length) {
while (n < length) {
- size_t s =
fread(buffer + n, 1
, length - n, stdin);
+ size_t s =
strbuf_fread(&buffer
, length - n, stdin);
if (!s && feof(stdin))
die("EOF in data (%lu bytes remaining)",
(unsigned long)(length - n));
if (!s && feof(stdin))
die("EOF in data (%lu bytes remaining)",
(unsigned long)(length - n));
@@
-1679,8
+1675,8
@@
static void *cmd_data (size_t *size)
}
skip_optional_lf();
}
skip_optional_lf();
- *size =
length
;
- return
buffer
;
+ *size =
buffer.len
;
+ return
strbuf_detach(&buffer)
;
}
static int validate_raw_date(const char *src, char *result, int maxlen)
}
static int validate_raw_date(const char *src, char *result, int maxlen)