strbuf: add new function strbuf_getwholeline()
This function is just like strbuf_getline() except it retains the line-termination character. This function will be used by the mailinfo and mailsplit builtins which require the entire line for parsing. Signed-off-by: Brandon Casey <drafnel@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
07a4a3b496
commit
c7e4f0d78a
15
strbuf.c
15
strbuf.c
@ -322,7 +322,7 @@ int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int strbuf_getline(struct strbuf *sb, FILE *fp, int term)
|
int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term)
|
||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
|
|
||||||
@ -332,10 +332,10 @@ int strbuf_getline(struct strbuf *sb, FILE *fp, int term)
|
|||||||
|
|
||||||
strbuf_reset(sb);
|
strbuf_reset(sb);
|
||||||
while ((ch = fgetc(fp)) != EOF) {
|
while ((ch = fgetc(fp)) != EOF) {
|
||||||
if (ch == term)
|
|
||||||
break;
|
|
||||||
strbuf_grow(sb, 1);
|
strbuf_grow(sb, 1);
|
||||||
sb->buf[sb->len++] = ch;
|
sb->buf[sb->len++] = ch;
|
||||||
|
if (ch == term)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (ch == EOF && sb->len == 0)
|
if (ch == EOF && sb->len == 0)
|
||||||
return EOF;
|
return EOF;
|
||||||
@ -344,6 +344,15 @@ int strbuf_getline(struct strbuf *sb, FILE *fp, int term)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int strbuf_getline(struct strbuf *sb, FILE *fp, int term)
|
||||||
|
{
|
||||||
|
if (strbuf_getwholeline(sb, fp, term))
|
||||||
|
return EOF;
|
||||||
|
if (sb->buf[sb->len-1] == term)
|
||||||
|
strbuf_setlen(sb, sb->len-1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint)
|
int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint)
|
||||||
{
|
{
|
||||||
int fd, len;
|
int fd, len;
|
||||||
|
1
strbuf.h
1
strbuf.h
@ -126,6 +126,7 @@ extern ssize_t strbuf_read(struct strbuf *, int fd, size_t hint);
|
|||||||
extern int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint);
|
extern int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint);
|
||||||
extern int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint);
|
extern int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint);
|
||||||
|
|
||||||
|
extern int strbuf_getwholeline(struct strbuf *, FILE *, int);
|
||||||
extern int strbuf_getline(struct strbuf *, FILE *, int);
|
extern int strbuf_getline(struct strbuf *, FILE *, int);
|
||||||
|
|
||||||
extern void stripspace(struct strbuf *buf, int skip_comments);
|
extern void stripspace(struct strbuf *buf, int skip_comments);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user