Mercurial > gnulib
annotate tests/test-freadptr.c @ 40224:5d9b82ca550a
tests: Free allocated memory.
Reported by <deltatau@protonmail.com> via Assaf Gordon.
* tests/test-astrxfrm.c (main): Free allocated memory.
* tests/test-bitset.c (compare, check_attributes): Free allocated
bitsets.
* tests/test-filenamecat.c (main): Free allocated memory.
* tests/test-freadahead.c (main): Free allocated memory and close stdin.
* tests/test-freadptr.c (main): Likewise.
* tests/test-freadptr2.c (main): Free allocated memory.
* tests/test-freadseek.c (main): Likewise.
* tests/test-gc-arcfour.c (main): Close allocated context.
* tests/test-gc-arctwo.c (main): Likewise.
* tests/test-gc-des.c (main): Close all allocated contexts.
* tests/test-pipe-filter-gi1.c (main): Free allocated memory.
* tests/test-pipe-filter-ii1.c (main): Likewise.
* tests/test-posix_spawn_file_actions_addchdir.c (main): Destroy the
allocated file actions.
* tests/test-posix_spawn_file_actions_addclose.c (main): Likewise.
* tests/test-posix_spawn_file_actions_adddup2.c (main): Likewise.
* tests/test-posix_spawn_file_actions_addopen.c (main): Likewise.
* tests/test-sameacls.c (main): Free allocated memory and ACLs.
* tests/test-strfmon_l.c (main): Free allocated locales.
* tests/test-striconveh.c (main): Free allocated iconv_t objects.
* tests/uniconv/test-u8-conv-to-enc.c (main): Free allocated memory.
* tests/uniconv/test-u16-conv-to-enc.c (main): Likewise.
* tests/uniconv/test-u32-conv-to-enc.c (main): Likewise.
* tests/unistr/test-chr.h (main): Free input32.
* tests/unistr/test-strchr.h (test_strchr): Likewise.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 10 Mar 2019 14:05:09 +0100 |
parents | 9626783b417a |
children |
rev | line source |
---|---|
9728 | 1 /* Test of freadptr() function. |
40057
b06060465f09
maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents:
19484
diff
changeset
|
2 Copyright (C) 2007-2019 Free Software Foundation, Inc. |
9728 | 3 |
4 This program is free software: you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 3 of the License, or | |
7 (at your option) any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
19190 | 15 along with this program. If not, see <https://www.gnu.org/licenses/>. */ |
9728 | 16 |
17 /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ | |
18 | |
19 #include <config.h> | |
20 | |
21 #include "freadptr.h" | |
22 | |
23 #include <stdlib.h> | |
24 #include <string.h> | |
25 #include <unistd.h> | |
26 | |
12496
a48d3d749ca5
Refactor common macros used in tests.
Bruno Haible <bruno@clisp.org>
parents:
12421
diff
changeset
|
27 #include "macros.h" |
9728 | 28 |
29 int | |
30 main (int argc, char **argv) | |
31 { | |
32 int nbytes = atoi (argv[1]); | |
40224
5d9b82ca550a
tests: Free allocated memory.
Bruno Haible <bruno@clisp.org>
parents:
40222
diff
changeset
|
33 { |
5d9b82ca550a
tests: Free allocated memory.
Bruno Haible <bruno@clisp.org>
parents:
40222
diff
changeset
|
34 void *buf = malloc (nbytes); |
5d9b82ca550a
tests: Free allocated memory.
Bruno Haible <bruno@clisp.org>
parents:
40222
diff
changeset
|
35 ASSERT (fread (buf, 1, nbytes, stdin) == nbytes); |
5d9b82ca550a
tests: Free allocated memory.
Bruno Haible <bruno@clisp.org>
parents:
40222
diff
changeset
|
36 free (buf); |
5d9b82ca550a
tests: Free allocated memory.
Bruno Haible <bruno@clisp.org>
parents:
40222
diff
changeset
|
37 } |
9728 | 38 |
39 if (lseek (0, 0, SEEK_CUR) == nbytes) | |
9779
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
40 { |
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
41 /* An unbuffered stdio, such as BeOS or on uClibc compiled without |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
42 __STDIO_BUFFERS. Or stdin is a pipe. */ |
9779
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
43 size_t size; |
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
44 ASSERT (freadptr (stdin, &size) == NULL); |
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
45 } |
9728 | 46 else |
47 { | |
48 /* Normal buffered stdio. */ | |
49 const char stdin_contents[] = | |
40222
9626783b417a
Fix test failure introduced by last commit.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
50 "#!/bin/sh\n\n${CHECKER} ./test-freadptr${EXEEXT} 5 < \"$srcdir/test-freadptr.sh\" || exit 1\ncat \"$srcdir/test-freadptr.sh\" | ${CHECKER} ./test-freadptr${EXEEXT} 5 || exit 1\nexit 0\n"; |
9728 | 51 const char *expected = stdin_contents + nbytes; |
9779
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
52 size_t available1; |
9734 | 53 size_t available2; |
54 size_t available3; | |
55 | |
56 /* Test normal behaviour. */ | |
57 { | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
58 const char *ptr = freadptr (stdin, &available1); |
9734 | 59 |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
60 ASSERT (ptr != NULL); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
61 ASSERT (available1 != 0); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
62 ASSERT (available1 <= strlen (expected)); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
63 ASSERT (memcmp (ptr, expected, available1) == 0); |
9734 | 64 } |
65 | |
66 /* Test behaviour after normal ungetc. */ | |
67 ungetc (fgetc (stdin), stdin); | |
9779
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
68 { |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
69 const char *ptr = freadptr (stdin, &available2); |
9734 | 70 |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
71 if (ptr != NULL) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
72 { |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
73 ASSERT (available2 == available1); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
74 ASSERT (memcmp (ptr, expected, available2) == 0); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
75 } |
9779
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
76 } |
9734 | 77 |
78 /* Test behaviour after arbitrary ungetc. */ | |
79 fgetc (stdin); | |
80 ungetc ('@', stdin); | |
9779
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
81 { |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
82 const char *ptr = freadptr (stdin, &available3); |
9734 | 83 |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
84 if (ptr != NULL) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
85 { |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
86 ASSERT (available3 == 1 || available3 == available1); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
87 ASSERT (ptr[0] == '@'); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
88 if (available3 > 1) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
89 { |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
90 ASSERT (memcmp (ptr + 1, expected + 1, available3 - 1) == 0); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
91 } |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
92 } |
9779
569a44f4dd4d
Extend freadptr to return also the buffer size.
Bruno Haible <bruno@clisp.org>
parents:
9734
diff
changeset
|
93 } |
9728 | 94 } |
95 | |
40224
5d9b82ca550a
tests: Free allocated memory.
Bruno Haible <bruno@clisp.org>
parents:
40222
diff
changeset
|
96 /* Free memory allocated during ungetc(). */ |
5d9b82ca550a
tests: Free allocated memory.
Bruno Haible <bruno@clisp.org>
parents:
40222
diff
changeset
|
97 fclose (stdin); |
5d9b82ca550a
tests: Free allocated memory.
Bruno Haible <bruno@clisp.org>
parents:
40222
diff
changeset
|
98 |
9728 | 99 return 0; |
100 } |