annotate tests/test-fgetc.c @ 16465:c0803728f645

New module 'modfl-ieee'. * modules/modfl-ieee: New file.
author Bruno Haible <bruno@clisp.org>
date Sun, 26 Feb 2012 17:55:31 +0100
parents bb182ee4a09d
children e542fd46ad6f
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.
16201
8250f2777afc maint: update all copyright year number ranges
Jim Meyering <meyering@redhat.com>
parents: 15796
diff changeset
2 Copyright (C) 2011-2012 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
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/>. */
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
15795
dd52b68a488b fputc, fwrite tests: Avoid test failure on MSVC.
Bruno Haible <bruno@clisp.org>
parents: 15770
diff changeset
28 #include "msvc-inval.h"
dd52b68a488b fputc, fwrite tests: Avoid test failure on MSVC.
Bruno Haible <bruno@clisp.org>
parents: 15770
diff changeset
29
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30 #include "macros.h"
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 int
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
33 main (int argc, char **argv)
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35 const char *filename = "test-fgetc.txt";
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36
15796
22a143e3638f fgetc, fputc, fread, fwrite tests: Fix link error.
Bruno Haible <bruno@clisp.org>
parents: 15795
diff changeset
37 /* 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
38 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
39 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \
22a143e3638f fgetc, fputc, fread, fwrite tests: Fix link error.
Bruno Haible <bruno@clisp.org>
parents: 15795
diff changeset
40 && 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
41 gl_msvc_inval_ensure_handler ();
dd52b68a488b fputc, fwrite tests: Avoid test failure on MSVC.
Bruno Haible <bruno@clisp.org>
parents: 15770
diff changeset
42 #endif
dd52b68a488b fputc, fwrite tests: Avoid test failure on MSVC.
Bruno Haible <bruno@clisp.org>
parents: 15770
diff changeset
43
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 /* Prepare a file. */
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46 const char text[] = "hello world";
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48 ASSERT (fd >= 0);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49 ASSERT (write (fd, text, sizeof (text)) == sizeof (text));
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50 ASSERT (close (fd) == 0);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
52
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53 /* Test that fgetc() sets errno if someone else closes the stream
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54 fd behind the back of stdio. */
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56 FILE *fp = fopen (filename, "r");
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 ASSERT (fp != NULL);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 ASSERT (close (fileno (fp)) == 0);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 errno = 0;
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 ASSERT (fgetc (fp) == EOF);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61 ASSERT (errno == EBADF);
15770
e01dbf6f2e44 Enhance fgetc, fputc tests.
Bruno Haible <bruno@clisp.org>
parents: 15714
diff changeset
62 ASSERT (ferror (fp));
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
63 fclose (fp);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
64 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
66 /* Test that fgetc() sets errno if the stream was constructed with
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
67 an invalid file descriptor. */
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
68 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69 FILE *fp = fdopen (-1, "r");
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
70 if (fp != NULL)
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
71 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
72 errno = 0;
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73 ASSERT (fgetc (fp) == EOF);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 ASSERT (errno == EBADF);
15770
e01dbf6f2e44 Enhance fgetc, fputc tests.
Bruno Haible <bruno@clisp.org>
parents: 15714
diff changeset
75 ASSERT (ferror (fp));
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 fclose (fp);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
78 }
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 FILE *fp = fdopen (99, "r");
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81 if (fp != NULL)
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
82 {
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
83 errno = 0;
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
84 ASSERT (fgetc (fp) == EOF);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
85 ASSERT (errno == EBADF);
15770
e01dbf6f2e44 Enhance fgetc, fputc tests.
Bruno Haible <bruno@clisp.org>
parents: 15714
diff changeset
86 ASSERT (ferror (fp));
15714
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
87 fclose (fp);
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
88 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
89 }
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
90
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
91 /* Clean up. */
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
92 unlink (filename);
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 return 0;
e94d72e8560e Tests for function fgetc().
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
95 }