Mercurial > hg > octave-shane > gnulib-hg
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 |
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 | 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 } |