Line data Source code
1 : /* Test of strerror() function.
2 : Copyright (C) 2007-2020 Free Software Foundation, Inc.
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, or (at your option)
7 : 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
15 : along with this program; if not, see <https://www.gnu.org/licenses/>. */
16 :
17 : /* Written by Eric Blake <ebb9@byu.net>, 2007. */
18 :
19 : #include <config.h>
20 :
21 : #include <string.h>
22 :
23 : #include "signature.h"
24 : SIGNATURE_CHECK (strerror, char *, (int));
25 :
26 : #include <errno.h>
27 :
28 : #include "macros.h"
29 :
30 : int
31 1 : main (void)
32 : {
33 : char *str;
34 :
35 1 : errno = 0;
36 1 : str = strerror (EACCES);
37 1 : ASSERT (str);
38 1 : ASSERT (*str);
39 1 : ASSERT (errno == 0);
40 :
41 1 : errno = 0;
42 1 : str = strerror (ETIMEDOUT);
43 1 : ASSERT (str);
44 1 : ASSERT (*str);
45 1 : ASSERT (errno == 0);
46 :
47 1 : errno = 0;
48 1 : str = strerror (EOVERFLOW);
49 1 : ASSERT (str);
50 1 : ASSERT (*str);
51 1 : ASSERT (errno == 0);
52 :
53 : /* POSIX requires strerror (0) to succeed. Reject use of "Unknown
54 : error", but allow "Success", "No error", or even Solaris' "Error
55 : 0" which are distinct patterns from true out-of-range strings.
56 : http://austingroupbugs.net/view.php?id=382 */
57 1 : errno = 0;
58 1 : str = strerror (0);
59 1 : ASSERT (str);
60 1 : ASSERT (*str);
61 1 : ASSERT (errno == 0);
62 1 : ASSERT (strstr (str, "nknown") == NULL);
63 1 : ASSERT (strstr (str, "ndefined") == NULL);
64 :
65 : /* POSIX requires strerror to produce a non-NULL result for all
66 : inputs; as an extension, we also guarantee a non-empty result.
67 : Reporting EINVAL is optional. */
68 1 : errno = 0;
69 1 : str = strerror (-3);
70 1 : ASSERT (str);
71 1 : ASSERT (*str);
72 1 : ASSERT (errno == 0 || errno == EINVAL);
73 :
74 1 : return 0;
75 : }
|