mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-06 17:20:22 +00:00
cfg_readline: really ignore empty lines
Simplify cfg_readline and at the same time fix it so that it does really ignore empty lines. This fixes point 2-1 of Issue #210 Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
This commit is contained in:
parent
a5f43b9536
commit
f2abee47d8
@ -483,15 +483,6 @@ static int cfg_peek(diskfile_backend *cfg, int flags)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *LINEBREAK_UNIX = "\\\n";
|
|
||||||
static const char *LINEBREAK_WIN32 = "\\\r\n";
|
|
||||||
|
|
||||||
static int is_linebreak(const char *pos)
|
|
||||||
{
|
|
||||||
return memcmp(pos - 1, LINEBREAK_UNIX, sizeof(LINEBREAK_UNIX)) == 0 ||
|
|
||||||
memcmp(pos - 2, LINEBREAK_WIN32, sizeof(LINEBREAK_WIN32)) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read and consume a line, returning it in newly-allocated memory.
|
* Read and consume a line, returning it in newly-allocated memory.
|
||||||
*/
|
*/
|
||||||
@ -502,38 +493,24 @@ static char *cfg_readline(diskfile_backend *cfg)
|
|||||||
int line_len;
|
int line_len;
|
||||||
|
|
||||||
line_src = cfg->reader.read_ptr;
|
line_src = cfg->reader.read_ptr;
|
||||||
|
|
||||||
|
/* Skip empty empty lines */
|
||||||
|
while (isspace(*line_src))
|
||||||
|
++line_src;
|
||||||
|
|
||||||
line_end = strchr(line_src, '\n');
|
line_end = strchr(line_src, '\n');
|
||||||
|
|
||||||
/* no newline at EOF */
|
/* no newline at EOF */
|
||||||
if (line_end == NULL)
|
if (line_end == NULL)
|
||||||
line_end = strchr(line_src, 0);
|
line_end = strchr(line_src, 0);
|
||||||
else
|
|
||||||
while (is_linebreak(line_end))
|
|
||||||
line_end = strchr(line_end + 1, '\n');
|
|
||||||
|
|
||||||
|
line_len = line_end - line_src;
|
||||||
|
|
||||||
while (line_src < line_end && isspace(*line_src))
|
line = git__malloc(line_len + 1);
|
||||||
line_src++;
|
|
||||||
|
|
||||||
line = (char *)git__malloc((size_t)(line_end - line_src) + 1);
|
|
||||||
if (line == NULL)
|
if (line == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
line_len = 0;
|
memcpy(line, line_src, line_len);
|
||||||
while (line_src < line_end) {
|
|
||||||
|
|
||||||
if (memcmp(line_src, LINEBREAK_UNIX, sizeof(LINEBREAK_UNIX)) == 0) {
|
|
||||||
line_src += sizeof(LINEBREAK_UNIX);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (memcmp(line_src, LINEBREAK_WIN32, sizeof(LINEBREAK_WIN32)) == 0) {
|
|
||||||
line_src += sizeof(LINEBREAK_WIN32);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
line[line_len++] = *line_src++;
|
|
||||||
}
|
|
||||||
|
|
||||||
line[line_len] = '\0';
|
line[line_len] = '\0';
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user