Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
More accurately detect header lines in read_one_header_line
author
Eric W. Biederman
<ebiederm@xmission.com>
Tue, 23 May 2006 19:53:20 +0000
(13:53 -0600)
committer
Junio C Hamano
<junkio@cox.net>
Tue, 23 May 2006 21:08:32 +0000
(14:08 -0700)
Only count lines of the form '^.*: ' and '^From ' as email
header lines.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
mailinfo.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
1f36bee
)
diff --git
a/mailinfo.c
b/mailinfo.c
index 99989c25b28a70043b866ab21cf6d88c45bc68ed..a2b15e2624702c90bd05d5a457df4c03694020c3 100644
(file)
--- a/
mailinfo.c
+++ b/
mailinfo.c
@@
-385,20
+385,29
@@
static int read_one_header_line(char *line, int sz, FILE *in)
{
int ofs = 0;
while (ofs < sz) {
{
int ofs = 0;
while (ofs < sz) {
+ const char *colon;
int peek, len;
if (fgets(line + ofs, sz - ofs, in) == NULL)
int peek, len;
if (fgets(line + ofs, sz - ofs, in) == NULL)
-
return ofs
;
+
break
;
len = eatspace(line + ofs);
if (len == 0)
len = eatspace(line + ofs);
if (len == 0)
- return ofs;
- peek = fgetc(in); ungetc(peek, in);
- if (peek == ' ' || peek == '\t') {
- /* Yuck, 2822 header "folding" */
- ofs += len;
- continue;
+ break;
+ colon = strchr(line, ':');
+ if (!colon || !isspace(colon[1])) {
+ /* Re-add the newline */
+ line[ofs + len] = '\n';
+ line[ofs + len + 1] = '\0';
+ break;
}
}
- return ofs + len;
+ ofs += len;
+ /* Yuck, 2822 header "folding" */
+ peek = fgetc(in); ungetc(peek, in);
+ if (peek != ' ' && peek != '\t')
+ break;
}
}
+ /* Count mbox From headers as headers */
+ if (!ofs && !memcmp(line, "From ", 5))
+ ofs = 1;
return ofs;
}
return ofs;
}