annotate tests/test-getndelim2.c @ 17593:d1e383af69e2

manywarnings: remove -Wmudflap * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Remove -Wmudflap, since it is no longer supported in gcc-4.9-to-be.
author Jim Meyering <meyering@fb.com>
date Thu, 02 Jan 2014 16:55:04 -0800
parents 344018b6e5d7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10006
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
1 /* Test of getndelim2() function.
17587
344018b6e5d7 maint: update copyright
Eric Blake <eblake@redhat.com>
parents: 17249
diff changeset
2 Copyright (C) 2008-2014 Free Software Foundation, Inc.
10006
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
3
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
6 the Free Software Foundation; either version 3, or (at your option)
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
7 any later version.
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
8
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
12 GNU General Public License for more details.
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
13
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
16366
bb182ee4a09d maint: replace FSF snail-mail addresses with URLs
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
15 along with this program; if not, see <http://www.gnu.org/licenses/>. */
10006
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
16
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
17 /* Written by Eric Blake <ebb9@byu.net>, 2008. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
18
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
19 #include <config.h>
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
20
12487
8ba9831d54bf Include header file being tested immediately after config.h.
Bruno Haible <bruno@clisp.org>
parents: 12421
diff changeset
21 #include "getndelim2.h"
8ba9831d54bf Include header file being tested immediately after config.h.
Bruno Haible <bruno@clisp.org>
parents: 12421
diff changeset
22
10006
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
23 #include <stdio.h>
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
24 #include <stdlib.h>
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
25 #include <string.h>
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
26
12496
a48d3d749ca5 Refactor common macros used in tests.
Bruno Haible <bruno@clisp.org>
parents: 12487
diff changeset
27 #include "macros.h"
10006
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
28
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
29 int
12197
e45d9bb2233e tests: avoid several compiler warnings
Eric Blake <ebb9@byu.net>
parents: 10033
diff changeset
30 main (void)
10006
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
31 {
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
32 FILE *f;
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
33 char *line = NULL;
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
34 size_t len = 0;
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
35 ssize_t result;
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
36
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
37 /* Create test file. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
38 f = fopen ("test-getndelim2.txt", "wb+");
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
39 if (!f || fwrite ("a\nbc\nd\0f", 1, 8, f) != 8)
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
40 {
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
41 fputs ("Failed to create sample file.\n", stderr);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
42 remove ("test-getndelim2.txt");
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
43 return 1;
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
44 }
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
45 rewind (f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
46
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
47 /* Unlimited lines. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
48
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
49 /* Test initial allocation, which must include trailing NUL. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
50 result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', '\n', f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
51 ASSERT (result == 2);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
52 ASSERT (strcmp (line, "a\n") == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
53 ASSERT (2 < len);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
54
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
55 /* Test growth of buffer, must not leak. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
56 free (line);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
57 line = malloc (1);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
58 len = 0;
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
59 result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, EOF, '\n', f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
60 ASSERT (result == 3);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
61 ASSERT (strcmp (line, "bc\n") == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
62 ASSERT (3 < len);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
63
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
64 /* Test embedded NULs and EOF behavior. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
65 result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', EOF, f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
66 ASSERT (result == 3);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
67 ASSERT (memcmp (line, "d\0f", 4) == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
68 ASSERT (3 < len);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
69
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
70 result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', EOF, f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
71 ASSERT (result == -1);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
72
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
73 /* Using offset and nmax. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
74
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
75 /* Limit growth to four bytes, including NUL, but parse to next 'd'. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
76 free (line);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
77 rewind (f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
78 line = malloc (8);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
79 memset (line, 'e', 8);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
80 len = 8;
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
81 result = getndelim2 (&line, &len, 6, 10, 'd', 'd', f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
82 ASSERT (result == 3);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
83 ASSERT (10 == len);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
84 ASSERT (strcmp (line, "eeeeeea\nb") == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
85
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
86 /* No change if offset larger than limit. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
87 result = getndelim2 (&line, &len, len, 1, EOF, EOF, f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
88 ASSERT (result == -1);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
89 ASSERT (10 == len);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
90 ASSERT (strcmp (line, "eeeeeea\nb") == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
91
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
92 /* Consume to end of file, including embedded NUL. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
93 result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, EOF, EOF, f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
94 ASSERT (result == 2);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
95 ASSERT (10 == len);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
96 ASSERT (memcmp (line, "\0f\0eeea\nb", 10) == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
97
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
98 result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', '\r', f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
99 ASSERT (result == -1);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
100
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
101 /* Larger file size. */
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
102 rewind (f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
103 {
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
104 int i;
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
105 for (i = 0; i < 16; i++)
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
106 fprintf (f, "%500x%c", i, i % 2 ? '\n' : '\r');
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
107 }
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
108 rewind (f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
109 {
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
110 char buffer[502];
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
111
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
112 result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', '\r', f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
113 ASSERT (result == 501);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
114 ASSERT (501 < len);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
115 memset (buffer, ' ', 499);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
116 buffer[499] = '0';
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
117 buffer[500] = '\r';
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
118 buffer[501] = '\0';
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
119 ASSERT (strcmp (buffer, line) == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
120
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
121 result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, '\n', '\r', f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
122 ASSERT (result == 501);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
123 ASSERT (501 < len);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
124 buffer[499] = '1';
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
125 buffer[500] = '\n';
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
126 ASSERT (strcmp (buffer, line) == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
127
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
128 result = getndelim2 (&line, &len, 0, GETNLINE_NO_LIMIT, 'g', 'f', f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
129 ASSERT (result == 501 * 14 - 1);
10033
24328ed2c4f6 avoid failed assertion with tight malloc
Jim Meyering <meyering@redhat.com>
parents: 10006
diff changeset
130 ASSERT (501 * 14 <= len);
10006
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
131 buffer[499] = 'f';
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
132 buffer[500] = '\0';
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
133 ASSERT (strcmp (buffer, line + 501 * 13) == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
134
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
135 result = getndelim2 (&line, &len, 501 * 14 - 1, GETNLINE_NO_LIMIT,
12421
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 12197
diff changeset
136 EOF, EOF, f);
10006
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
137 ASSERT (result == 1);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
138 buffer[500] = '\n';
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
139 ASSERT (strcmp (buffer, line + 501 * 13) == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
140
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
141 result = getndelim2 (&line, &len, 501 * 14 - 1, GETNLINE_NO_LIMIT,
12421
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 12197
diff changeset
142 EOF, EOF, f);
10006
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
143 buffer[500] = '\0';
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
144 ASSERT (strcmp (buffer, line + 501 * 13) == 0);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
145 ASSERT (result == -1);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
146 }
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
147
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
148 fclose (f);
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
149 remove ("test-getndelim2.txt");
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
150 return 0;
b0a275071b2c Test getndelim2.
Eric Blake <ebb9@byu.net>
parents:
diff changeset
151 }