Branch data Line data Source code
1 : : /* Test of strerror() function.
2 : : Copyright (C) 2007-2012 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 <http://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 : : }
|