diff options
author | Eric Blake <ebb9@byu.net> | 2007-08-22 12:54:21 +0000 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2007-08-22 12:54:21 +0000 |
commit | d68417c03e69fde605af699ba9a9671c663d8baf (patch) | |
tree | 5ab8a71b84ce6ae1e24722666f0c106523060201 /tests/test-getline.c | |
parent | 7042775894700f8be0e6bc2a5ff3c49fc77296bc (diff) | |
download | gnulib-d68417c03e69fde605af699ba9a9671c663d8baf.tar.gz |
Move getline and getdelim into stdio.h, per POSIX 200x.
* modules/getline (Files): Remove getline.h.
(Depends-on): Add stdio.
(configure.ac): Add module indicator.
* modules/getdelim (Files): Remove getdelim.h.
(Depends-on): Add stdio.
(configure.ac): Add module indicator.
* modules/stdio (Makefile.am): Work with new indicators.
* m4/stdio_h.m4 (gl_STDIO_H_DEFAULTS): Add new defaults.
* m4/getdelim.m4 (gl_FUNC_GETDELIM): Work with stdio needs.
* m4/getline.m4 (gl_FUNC_GETLINE): Likewise.
* lib/getdelim.h: Delete.
* lib/getline.h: Delete.
* lib/stdio_.h (getdelim, getline): Declare.
* modules/getdelim-tests: New module.
* modules/getline-tests: Likewise.
* tests/test-getdelim.c: New file.
* tests/test-getline.c: Likewise.
* NEWS: Document the change.
* lib/getline.c: Update choice of header.
* lib/csharpcomp.c: Likewise.
* lib/getpass.c: Likewise.
* lib/javacomp.c: Likewise.
* lib/javaversion.c: Likewise.
* lib/yesno.c: Likewise.
* lib/getdelim.c: Likewise.
(getdelim): Set errno on failure, and avoid memory leak.
Diffstat (limited to 'tests/test-getline.c')
-rw-r--r-- | tests/test-getline.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/test-getline.c b/tests/test-getline.c new file mode 100644 index 0000000000..6b66d71dbe --- /dev/null +++ b/tests/test-getline.c @@ -0,0 +1,89 @@ +/* Test of getline() function. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake <ebb9@byu.net>, 2007. */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char **argv) +{ + FILE *f; + char *line = NULL; + size_t len = 0; + ssize_t result; + + /* Create test file. */ + f = fopen ("test-getline.txt", "wb"); + if (!f || fwrite ("a\nbc\nd\0f", 1, 8, f) != 8 || fclose (f) != 0) + { + fputs ("Failed to create sample file.\n", stderr); + unlink ("test-getline.txt"); + return 1; + } + f = fopen ("test-getline.txt", "rb"); + if (!f) + { + fputs ("Failed to reopen sample file.\n", stderr); + unlink ("test-getline.txt"); + return 1; + } + + /* Test initial allocation, which must include trailing NUL. */ + result = getline (&line, &len, f); + ASSERT (result == 2); + ASSERT (strcmp (line, "a\n") == 0); + ASSERT (2 < len); + + /* Test growth of buffer, must not leak. */ + free (line); + line = malloc (1); + len = 0; + result = getline (&line, &len, f); + ASSERT (result == 3); + ASSERT (strcmp (line, "bc\n") == 0); + ASSERT (3 < len); + + /* Test embedded NULs and EOF behavior. */ + result = getline (&line, &len, f); + ASSERT (result == 3); + ASSERT (memcmp (line, "d\0f", 4) == 0); + ASSERT (3 < len); + + result = getline (&line, &len, f); + ASSERT (result == -1); + + free (line); + fclose (f); + unlink ("test-getline.txt"); + return 0; +} |