annotate tests/test-strerror_r.c @ 17632:86af85d364e1 default tip

unistd: port readlink to Mac OS X 10.3.9 * lib/unistd.in.h (_GL_INCLUDING_UNISTD_H): New macro, to work around self-include problem in Mac OS X 10.3.9 when combined with readlink module. Problem reported by Klaus Zietler in <http://bugs.gnu.org/16825>.
author Paul Eggert <eggert@penguin.cs.ucla.edu>
date Tue, 25 Feb 2014 11:16:27 -0800
parents 344018b6e5d7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Test of strerror_r() function.
17587
344018b6e5d7 maint: update copyright
Eric Blake <eblake@redhat.com>
parents: 17249
diff changeset
2 Copyright (C) 2007-2014 Free Software Foundation, Inc.
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6 the Free Software Foundation; either version 3, or (at your option)
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
7 any later version.
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 GNU General Public License for more details.
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13
3e10d2e4b8af Tests for module 'strerror_r-posix'.
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/>. */
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17 #include <config.h>
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 #include <string.h>
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include "signature.h"
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22 SIGNATURE_CHECK (strerror_r, int, (int, char *, size_t));
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
23
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24 #include <errno.h>
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26 #include "macros.h"
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28 int
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 main (void)
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30 {
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31 char buf[100];
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 int ret;
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
33
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 /* Test results with valid errnum and enough room. */
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
36 errno = 0;
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 buf[0] = '\0';
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
38 ASSERT (strerror_r (EACCES, buf, sizeof buf) == 0);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
39 ASSERT (buf[0] != '\0');
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
40 ASSERT (errno == 0);
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
41 ASSERT (strlen (buf) < sizeof buf);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
43 errno = 0;
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 buf[0] = '\0';
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
45 ASSERT (strerror_r (ETIMEDOUT, buf, sizeof buf) == 0);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46 ASSERT (buf[0] != '\0');
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
47 ASSERT (errno == 0);
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
48 ASSERT (strlen (buf) < sizeof buf);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
50 errno = 0;
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51 buf[0] = '\0';
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
52 ASSERT (strerror_r (EOVERFLOW, buf, sizeof buf) == 0);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53 ASSERT (buf[0] != '\0');
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
54 ASSERT (errno == 0);
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
55 ASSERT (strlen (buf) < sizeof buf);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56
14763
19cd3c889b58 strerror: relax test for Solaris
Eric Blake <eblake@redhat.com>
parents: 14762
diff changeset
57 /* POSIX requires strerror (0) to succeed. Reject use of "Unknown
19cd3c889b58 strerror: relax test for Solaris
Eric Blake <eblake@redhat.com>
parents: 14762
diff changeset
58 error", but allow "Success", "No error", or even Solaris' "Error
19cd3c889b58 strerror: relax test for Solaris
Eric Blake <eblake@redhat.com>
parents: 14762
diff changeset
59 0" which are distinct patterns from true out-of-range strings.
14762
3c012e3d3f43 strerror: enforce POSIX ruling on strerror(0)
Eric Blake <eblake@redhat.com>
parents: 14270
diff changeset
60 http://austingroupbugs.net/view.php?id=382 */
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
61 errno = 0;
14762
3c012e3d3f43 strerror: enforce POSIX ruling on strerror(0)
Eric Blake <eblake@redhat.com>
parents: 14270
diff changeset
62 buf[0] = '\0';
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
63 ret = strerror_r (0, buf, sizeof buf);
14762
3c012e3d3f43 strerror: enforce POSIX ruling on strerror(0)
Eric Blake <eblake@redhat.com>
parents: 14270
diff changeset
64 ASSERT (ret == 0);
3c012e3d3f43 strerror: enforce POSIX ruling on strerror(0)
Eric Blake <eblake@redhat.com>
parents: 14270
diff changeset
65 ASSERT (buf[0]);
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
66 ASSERT (errno == 0);
14762
3c012e3d3f43 strerror: enforce POSIX ruling on strerror(0)
Eric Blake <eblake@redhat.com>
parents: 14270
diff changeset
67 ASSERT (strstr (buf, "nknown") == NULL);
14895
66b65ce5da39 strerror_r-posix: fix on MacOS
Eric Blake <eblake@redhat.com>
parents: 14815
diff changeset
68 ASSERT (strstr (buf, "ndefined") == NULL);
14762
3c012e3d3f43 strerror: enforce POSIX ruling on strerror(0)
Eric Blake <eblake@redhat.com>
parents: 14270
diff changeset
69
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
70 /* Test results with out-of-range errnum and enough room. POSIX
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
71 allows an empty string on success, and allows an unchanged buf on
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
72 error, but these are not useful, so we guarantee contents. */
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
73 errno = 0;
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 buf[0] = '^';
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
75 ret = strerror_r (-3, buf, sizeof buf);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 ASSERT (ret == 0 || ret == EINVAL);
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
77 ASSERT (buf[0] != '^');
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
78 ASSERT (*buf);
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
79 ASSERT (errno == 0);
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
80 ASSERT (strlen (buf) < sizeof buf);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
82 /* Test results with a too small buffer. POSIX requires an error;
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
83 only ERANGE for 0 and valid errors, and a choice of ERANGE or
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
84 EINVAL for out-of-range values. On error, POSIX permits buf to
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
85 be empty, unchanged, or unterminated, but these are not useful,
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
86 so we guarantee NUL-terminated truncated contents for all but
14895
66b65ce5da39 strerror_r-posix: fix on MacOS
Eric Blake <eblake@redhat.com>
parents: 14815
diff changeset
87 size 0. http://austingroupbugs.net/view.php?id=398. Also ensure
66b65ce5da39 strerror_r-posix: fix on MacOS
Eric Blake <eblake@redhat.com>
parents: 14815
diff changeset
88 that no out-of-bounds writes occur. */
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
89 {
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
90 int errs[] = { EACCES, 0, -3, };
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
91 int j;
14895
66b65ce5da39 strerror_r-posix: fix on MacOS
Eric Blake <eblake@redhat.com>
parents: 14815
diff changeset
92
66b65ce5da39 strerror_r-posix: fix on MacOS
Eric Blake <eblake@redhat.com>
parents: 14815
diff changeset
93 buf[sizeof buf - 1] = '\0';
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
94 for (j = 0; j < SIZEOF (errs); j++)
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
95 {
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
96 int err = errs[j];
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
97 char buf2[sizeof buf] = "";
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
98 size_t len;
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
99 size_t i;
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
100
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
101 strerror_r (err, buf2, sizeof buf2);
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
102 len = strlen (buf2);
14895
66b65ce5da39 strerror_r-posix: fix on MacOS
Eric Blake <eblake@redhat.com>
parents: 14815
diff changeset
103 ASSERT (len < sizeof buf);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
104
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
105 for (i = 0; i <= len; i++)
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
106 {
14895
66b65ce5da39 strerror_r-posix: fix on MacOS
Eric Blake <eblake@redhat.com>
parents: 14815
diff changeset
107 memset (buf, '^', sizeof buf - 1);
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
108 errno = 0;
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
109 ret = strerror_r (err, buf, i);
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
110 ASSERT (errno == 0);
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
111 if (err < 0)
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
112 ASSERT (ret == ERANGE || ret == EINVAL);
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
113 else
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
114 ASSERT (ret == ERANGE);
14895
66b65ce5da39 strerror_r-posix: fix on MacOS
Eric Blake <eblake@redhat.com>
parents: 14815
diff changeset
115 if (i)
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
116 {
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
117 ASSERT (strncmp (buf, buf2, i - 1) == 0);
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
118 ASSERT (buf[i - 1] == '\0');
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
119 }
14895
66b65ce5da39 strerror_r-posix: fix on MacOS
Eric Blake <eblake@redhat.com>
parents: 14815
diff changeset
120 ASSERT (strspn (buf + i, "^") == sizeof buf - 1 - i);
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
121 }
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
122
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
123 strcpy (buf, "BADFACE");
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
124 errno = 0;
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
125 ret = strerror_r (err, buf, len + 1);
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
126 ASSERT (ret != ERANGE);
14769
8e815ef27998 strerror_r: guarantee unchanged errno
Eric Blake <eblake@redhat.com>
parents: 14763
diff changeset
127 ASSERT (errno == 0);
14815
820329b2a895 strerror_r: enforce POSIX recommendations
Eric Blake <eblake@redhat.com>
parents: 14786
diff changeset
128 ASSERT (strcmp (buf, buf2) == 0);
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
129 }
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
130 }
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
131
14786
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
132 #if GNULIB_STRERROR
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
133 /* Test that strerror_r does not clobber strerror buffer. On some
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
134 platforms, this test can only succeed if gnulib also replaces
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
135 strerror. */
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
136 {
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
137 const char *msg1;
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
138 const char *msg2;
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
139 const char *msg3;
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
140 const char *msg4;
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
141 char *str1;
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
142 char *str2;
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
143 char *str3;
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
144 char *str4;
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
145
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
146 msg1 = strerror (ENOENT);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
147 ASSERT (msg1);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
148 str1 = strdup (msg1);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
149 ASSERT (str1);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
150
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
151 msg2 = strerror (ERANGE);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
152 ASSERT (msg2);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
153 str2 = strdup (msg2);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
154 ASSERT (str2);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
155
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
156 msg3 = strerror (-4);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
157 ASSERT (msg3);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
158 str3 = strdup (msg3);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
159 ASSERT (str3);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
160
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
161 msg4 = strerror (1729576);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
162 ASSERT (msg4);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
163 str4 = strdup (msg4);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
164 ASSERT (str4);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
165
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
166 strerror_r (EACCES, buf, sizeof buf);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
167 strerror_r (-5, buf, sizeof buf);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
168 ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
169 ASSERT (msg2 == msg4 || STREQ (msg2, str2));
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
170 ASSERT (msg3 == msg4 || STREQ (msg3, str3));
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
171 ASSERT (STREQ (msg4, str4));
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
172
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
173 free (str1);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
174 free (str2);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
175 free (str3);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
176 free (str4);
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
177 }
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
178 #endif
5a40a173eb17 strerror_r: avoid clobbering strerror on cygwin
Eric Blake <eblake@redhat.com>
parents: 14769
diff changeset
179
13848
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
180 return 0;
3e10d2e4b8af Tests for module 'strerror_r-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
181 }