+ free (lineptr);
+
+ /* Test that we can read until -1 is returned and then access the last line
+ of the file. This behavior was broken by commit
+ 33eff78c8b28adc4963987880e10d96761f2a167 and later fixed. */
+ lineptr = NULL;
+ linelen = 0;
+ char input[] = "a\nb\nc\n";
+ TEST_VERIFY_EXIT (fwrite (input, 1, sizeof input - 1, fp)
+ == sizeof input - 1);
+ TEST_VERIFY_EXIT (fseeko (fp, 0, SEEK_SET) == 0);
+ char expect[] = { 'a' - 1, '\n', '\0' };
+ for (int i = 0; i < 3; ++i)
+ {
+ ++expect[0];
+ TEST_VERIFY (getdelim (&lineptr, &linelen, '\n', fp) == 2);
+ TEST_VERIFY (linelen > 2);
+ TEST_VERIFY (strcmp (lineptr, expect) == 0);
+ }
+ TEST_VERIFY (getdelim (&lineptr, &linelen, '\n', fp) == -1);
+ TEST_VERIFY (feof (fp));
+ TEST_VERIFY (linelen > 2);
+ TEST_VERIFY (strcmp (lineptr, expect) == 0);
+
+ /* Test the same thing without a newline. */
+ TEST_VERIFY_EXIT (fwrite ("d", 1, 1, fp) == 1);
+ TEST_VERIFY_EXIT (fseeko (fp, -1, SEEK_CUR) == 0);
+ TEST_VERIFY (getdelim (&lineptr, &linelen, '\n', fp) == 1);
+ TEST_VERIFY (linelen > 2);
+ TEST_VERIFY (strcmp (lineptr, "d") == 0);
+ TEST_VERIFY (getdelim (&lineptr, &linelen, '\n', fp) == -1);
+ TEST_VERIFY (feof (fp));
+ TEST_VERIFY (linelen > 2);
+ TEST_VERIFY (strcmp (lineptr, "d") == 0);