@matheusbsbs / matheus-bagliano / commits / c8f373a5ce
Fork 0

builtin-mailinfo,builtin-mailsplit: use strbufs

There should be no functional change. Just the necessary changes and simplifications associated with calling strbuf_getwholeline() rather than an internal function or fgets. Signed-off-by: Brandon Casey <drafnel@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Brandon Casey committed Aug 4, 2009 at 22:31 UTC c8f373a5ce8be2b85da25f1e3b1ef9056ecca4a6
2 files changed +9 -19
builtin-mailinfo.c
+1 -7
@@ -765,7 +765,6 @@ static void handle_filter(struct strbuf *line)
765
766 static void handle_body(void)
767 {
768 - int len = 0;
768 struct strbuf prev = STRBUF_INIT;
769
770 /* Skip up to the first boundary */
@@ -775,8 +774,6 @@ static void handle_body(void)
774 }
775
776 do {
778 - strbuf_setlen(&line, line.len + len);
779 -
777 /* process any boundary lines */
778 if (*content_top && is_multipart_boundary(&line)) {
779 /* flush any leftover */
@@ -832,10 +829,7 @@ static void handle_body(void)
829 handle_filter(&line);
830 }
831
835 - strbuf_reset(&line);
836 - if (strbuf_avail(&line) < 100)
837 - strbuf_grow(&line, 100);
838 - } while ((len = read_line_with_nul(line.buf, strbuf_avail(&line), fin)));
832 + } while (!strbuf_getwholeline(&line, fin, '\n'));
833
834 handle_body_out:
835 strbuf_release(&prev);
builtin-mailsplit.c
+8 -12
@@ -7,6 +7,7 @@
7 #include "cache.h"
8 #include "builtin.h"
9 #include "string-list.h"
10 +#include "strbuf.h"
11
12 static const char git_mailsplit_usage[] =
13 "git mailsplit [-d<prec>] [-f<n>] [-b] -o<directory> [<mbox>|<Maildir>...]";
@@ -42,8 +43,7 @@ static int is_from_line(const char *line, int len)
43 return 1;
44 }
45
45 -/* Could be as small as 64, enough to hold a Unix "From " line. */
46 -static char buf[4096];
46 +static struct strbuf buf = STRBUF_INIT;
47
48 /* We cannot use fgets() because our lines can contain NULs */
49 int read_line_with_nul(char *buf, int size, FILE *in)
@@ -71,10 +71,9 @@ int read_line_with_nul(char *buf, int size, FILE *in)
71 static int split_one(FILE *mbox, const char *name, int allow_bare)
72 {
73 FILE *output = NULL;
74 - int len = strlen(buf);
74 int fd;
75 int status = 0;
77 - int is_bare = !is_from_line(buf, len);
76 + int is_bare = !is_from_line(buf.buf, buf.len);
77
78 if (is_bare && !allow_bare)
79 goto corrupt;
@@ -88,20 +87,17 @@ static int split_one(FILE *mbox, const char *name, int allow_bare)
87 * "From " and having something that looks like a date format.
88 */
89 for (;;) {
91 - int is_partial = len && buf[len-1] != '\n';
92 -
93 - if (fwrite(buf, 1, len, output) != len)
90 + if (fwrite(buf.buf, 1, buf.len, output) != buf.len)
91 die_errno("cannot write output");
92
96 - len = read_line_with_nul(buf, sizeof(buf), mbox);
97 - if (len == 0) {
93 + if (strbuf_getwholeline(&buf, mbox, '\n')) {
94 if (feof(mbox)) {
95 status = 1;
96 break;
97 }
98 die_errno("cannot read mbox");
99 }
104 - if (!is_partial && !is_bare && is_from_line(buf, len))
100 + if (!is_bare && is_from_line(buf.buf, buf.len))
101 break; /* done with one message */
102 }
103 fclose(output);
@@ -166,7 +162,7 @@ static int split_maildir(const char *maildir, const char *dir,
162 goto out;
163 }
164
169 - if (fgets(buf, sizeof(buf), f) == NULL) {
165 + if (strbuf_getwholeline(&buf, f, '\n')) {
166 error("cannot read mail %s (%s)", file, strerror(errno));
167 goto out;
168 }
@@ -203,7 +199,7 @@ static int split_mbox(const char *file, const char *dir, int allow_bare,
199 } while (isspace(peek));
200 ungetc(peek, f);
201
206 - if (fgets(buf, sizeof(buf), f) == NULL) {
202 + if (strbuf_getwholeline(&buf, f, '\n')) {
203 /* empty stdin is OK */
204 if (f != stdin) {
205 error("cannot read mbox %s", file);