on master help sign in
Merge pull request #3022 from melted/issue3021

Null terminate the returned string on eof without delimiter.

commit504187ba5809023a8bd3ed79dd65d19a832a8de1 authorNiklas Larsson <metaniklas@gmail.com> dateSun 6 Mar 2016, 12:44 (11 years ago) parentb7093b19610578
1 file changed+32−31
rts/getline.c+32−31
rts/getline.c+32−31
@@ -38,40 +38,41 @@
3838ssize_t
3939getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
4040{
41− char *ptr, *eptr;
41+ char *ptr, *eptr;
4242
43−
44− if (*buf == NULL || *bufsiz == 0) {
45− *bufsiz = BUFSIZ;
46− if ((*buf = malloc(*bufsiz)) == NULL)
47− return -1;
48− }
49−
50− for (ptr = *buf, eptr = *buf + *bufsiz;;) {
51− int c = fgetc(fp);
52− if (c == -1) {
53− if (feof(fp))
54− return ptr == *buf ? -1 : ptr - *buf;
55− else
56− return -1;
43+ if (*buf == NULL || *bufsiz == 0) {
44+ *bufsiz = BUFSIZ;
45+ if ((*buf = malloc(*bufsiz)) == NULL)
46+ return -1;
5747 }
58− *ptr++ = c;
59− if (c == delimiter) {
60− *ptr = '\0';
61− return ptr - *buf;
62− }
63− if (ptr + 2 >= eptr) {
64− char *nbuf;
65− size_t nbufsiz = *bufsiz * 2;
66− ssize_t d = ptr - *buf;
67− if ((nbuf = realloc(*buf, nbufsiz)) == NULL)
68− return -1;
69− *buf = nbuf;
70− *bufsiz = nbufsiz;
71− eptr = nbuf + nbufsiz;
72− ptr = nbuf + d;
48+
49+ for (ptr = *buf, eptr = *buf + *bufsiz;;) {
50+ int c = fgetc(fp);
51+ if (c == -1) {
52+ if (feof(fp)) {
53+ *ptr = '\0';
54+ return ptr - *buf;
55+ } else {
56+ return -1;
57+ }
58+ }
59+ *ptr++ = c;
60+ if (c == delimiter) {
61+ *ptr = '\0';
62+ return ptr - *buf;
63+ }
64+ if (ptr + 2 >= eptr) {
65+ char *nbuf;
66+ size_t nbufsiz = *bufsiz * 2;
67+ ssize_t d = ptr - *buf;
68+ if ((nbuf = realloc(*buf, nbufsiz)) == NULL)
69+ return -1;
70+ *buf = nbuf;
71+ *bufsiz = nbufsiz;
72+ eptr = nbuf + nbufsiz;
73+ ptr = nbuf + d;
74+ }
7375 }
74− }
7576}
7677
7778ssize_t