Support .pc file without a trailing newline
Some editors write text files without a newline character at the end of the last line. Before this change, the main loop in pkg_new_from_file() expected a newline character at the end of the line and overwrote it with a NUL character. In the case of the last line in a non-newline-terminated file, this ate the last character of that line. Now, the pkg_fgetline() function takes care of returning a line without the newline character (or the "\r\n" sequence in case of a DOS file format).pull/70/merge
parent
f8040e7f65
commit
bff5f15d0a
12
fileio.c
12
fileio.c
|
@ -83,10 +83,18 @@ pkg_fgetline(char *line, size_t size, FILE *stream)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*s = '\0';
|
|
||||||
|
|
||||||
if (c == EOF && (s == line || ferror(stream)))
|
if (c == EOF && (s == line || ferror(stream)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
*s = '\0';
|
||||||
|
|
||||||
|
/* Remove newline character. */
|
||||||
|
if (s > line && *(--s) == '\n') {
|
||||||
|
*s = '\0';
|
||||||
|
|
||||||
|
if (s > line && *(--s) == '\r')
|
||||||
|
*s = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
2
pkg.c
2
pkg.c
|
@ -212,8 +212,6 @@ pkg_new_from_file(const char *filename, FILE *f, unsigned int flags)
|
||||||
{
|
{
|
||||||
char op, *p, *key, *value;
|
char op, *p, *key, *value;
|
||||||
|
|
||||||
readbuf[strlen(readbuf) - 1] = '\0';
|
|
||||||
|
|
||||||
p = readbuf;
|
p = readbuf;
|
||||||
while (*p && (isalpha(*p) || isdigit(*p) || *p == '_' || *p == '.'))
|
while (*p && (isalpha(*p) || isdigit(*p) || *p == '_' || *p == '.'))
|
||||||
p++;
|
p++;
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
prefix=/usr
|
||||||
|
exec_prefix=${prefix}
|
||||||
|
libdir=${prefix}/lib
|
||||||
|
includedir=${prefix}/include
|
||||||
|
|
||||||
|
Name: no-trailing-newline
|
||||||
|
Description: A testing pkg-config file
|
||||||
|
Version: 1.2.3
|
||||||
|
Libs: -L${libdir}/no-trailing-newline -lno-trailing-newline
|
||||||
|
Cflags: -I${includedir}/no-trailing-newline
|
|
@ -122,6 +122,8 @@ run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --static --libs-only-l private-
|
||||||
# 4) tests for parser bugs
|
# 4) tests for parser bugs
|
||||||
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs dos-lineendings" \
|
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs dos-lineendings" \
|
||||||
'-L/usr/lib/dos-lineendings -ldos-lineendings'
|
'-L/usr/lib/dos-lineendings -ldos-lineendings'
|
||||||
|
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --cflags no-trailing-newline" \
|
||||||
|
'-I/usr/include/no-trailing-newline'
|
||||||
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs argv-parse" \
|
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs argv-parse" \
|
||||||
'-llib-2 -lpthread'
|
'-llib-2 -lpthread'
|
||||||
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --exists -foo; echo \$?" \
|
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --exists -foo; echo \$?" \
|
||||||
|
|
Loading…
Reference in New Issue