annotate tests/test-fgetc.c @ 40196:e63f5d3edab5

relocatable-prog: Update documentation. * doc/relocatable-maint.texi (Supporting Relocation): Update to match the recent changes.
author Bruno Haible <bruno@clisp.org>
date Sun, 24 Feb 2019 01:49:15 +0100
parents b06060465f09
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Test of fgetc() function.
40057
b06060465f09 maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents: 19484
diff changeset
2 Copyright (C) 2011-2019 Free Software Foundation, Inc.
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6 the Free Software Foundation; either version 3, or (at your option)
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
7 any later version.
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 GNU General Public License for more details.
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
19190
9759915b2aca all: prefer https: URLs
Paul Eggert <eggert@cs.ucla.edu>
parents: 18883
diff changeset
15 along with this program; if not, see <https://www.gnu.org/licenses/>. */
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17 #include <config.h>
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 #include <stdio.h>
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include "signature.h"
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22 SIGNATURE_CHECK (fgetc, int, (FILE *));
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
23
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24 #include <errno.h>
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25 #include <fcntl.h>
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26 #include <unistd.h>
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27
18883
19886582ca8d Implement a way to opt out from MSVC support.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
28 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER
19886582ca8d Implement a way to opt out from MSVC support.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
29 # include "msvc-inval.h"
19886582ca8d Implement a way to opt out from MSVC support.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
30 #endif
15795
dd52b68a488b fputc, fwrite tests: Avoid test failure on MSVC.
Bruno Haible <bruno@clisp.org>
parents: 15770
diff changeset
31
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 #include "macros.h"
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
33
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 int
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35 main (int argc, char **argv)
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 const char *filename = "test-fgetc.txt";
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
38
15796
22a143e3638f fgetc, fputc, fread, fwrite tests: Fix link error.
Bruno Haible <bruno@clisp.org>
parents: 15795
diff changeset
39 /* We don't have an fgetc() function that installs an invalid parameter
15795
dd52b68a488b fputc, fwrite tests: Avoid test failure on MSVC.
Bruno Haible <bruno@clisp.org>
parents: 15770
diff changeset
40 handler so far. So install that handler here, explicitly. */
15796
22a143e3638f fgetc, fputc, fread, fwrite tests: Fix link error.
Bruno Haible <bruno@clisp.org>
parents: 15795
diff changeset
41 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \
22a143e3638f fgetc, fputc, fread, fwrite tests: Fix link error.
Bruno Haible <bruno@clisp.org>
parents: 15795
diff changeset
42 && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING
15795
dd52b68a488b fputc, fwrite tests: Avoid test failure on MSVC.
Bruno Haible <bruno@clisp.org>
parents: 15770
diff changeset
43 gl_msvc_inval_ensure_handler ();
dd52b68a488b fputc, fwrite tests: Avoid test failure on MSVC.
Bruno Haible <bruno@clisp.org>
parents: 15770
diff changeset
44 #endif
dd52b68a488b fputc, fwrite tests: Avoid test failure on MSVC.
Bruno Haible <bruno@clisp.org>
parents: 15770
diff changeset
45
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46 /* Prepare a file. */
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48 const char text[] = "hello world";
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49 int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50 ASSERT (fd >= 0);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51 ASSERT (write (fd, text, sizeof (text)) == sizeof (text));
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
52 ASSERT (close (fd) == 0);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 /* Test that fgetc() sets errno if someone else closes the stream
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56 fd behind the back of stdio. */
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 FILE *fp = fopen (filename, "r");
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 ASSERT (fp != NULL);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 ASSERT (close (fileno (fp)) == 0);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61 errno = 0;
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
62 ASSERT (fgetc (fp) == EOF);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
63 ASSERT (errno == EBADF);
15770
e01dbf6f2e44 Enhance fgetc, fputc tests.
Bruno Haible <bruno@clisp.org>
parents: 15714
diff changeset
64 ASSERT (ferror (fp));
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65 fclose (fp);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
66 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
67
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
68 /* Test that fgetc() sets errno if the stream was constructed with
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69 an invalid file descriptor. */
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
70 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
71 FILE *fp = fdopen (-1, "r");
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
72 if (fp != NULL)
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 errno = 0;
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75 ASSERT (fgetc (fp) == EOF);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 ASSERT (errno == EBADF);
15770
e01dbf6f2e44 Enhance fgetc, fputc tests.
Bruno Haible <bruno@clisp.org>
parents: 15714
diff changeset
77 ASSERT (ferror (fp));
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
78 fclose (fp);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
79 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
80 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81 {
17292
3a09cc104f4c tests: don't assume fd 99 is closed
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
82 FILE *fp;
3a09cc104f4c tests: don't assume fd 99 is closed
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
83 close (99);
3a09cc104f4c tests: don't assume fd 99 is closed
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
84 fp = fdopen (99, "r");
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
85 if (fp != NULL)
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
86 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
87 errno = 0;
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
88 ASSERT (fgetc (fp) == EOF);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
89 ASSERT (errno == EBADF);
15770
e01dbf6f2e44 Enhance fgetc, fputc tests.
Bruno Haible <bruno@clisp.org>
parents: 15714
diff changeset
90 ASSERT (ferror (fp));
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
91 fclose (fp);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
92 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
93 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
94
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
95 /* Clean up. */
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
96 unlink (filename);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
97
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
98 return 0;
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
99 }