1 /* Test of strerror() function. 2 Copyright (C) 2007-2021 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 main (void) /* */ 32 { 33 char *str; 34 35 errno = 0; 36 str = strerror (EACCES); 37 ASSERT (str); 38 ASSERT (*str); 39 ASSERT (errno == 0); 40 41 errno = 0; 42 str = strerror (ETIMEDOUT); 43 ASSERT (str); 44 ASSERT (*str); 45 ASSERT (errno == 0); 46 47 errno = 0; 48 str = strerror (EOVERFLOW); 49 ASSERT (str); 50 ASSERT (*str); 51 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 errno = 0; 58 str = strerror (0); 59 ASSERT (str); 60 ASSERT (*str); 61 ASSERT (errno == 0); 62 ASSERT (strstr (str, "nknown") == NULL); 63 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 errno = 0; 69 str = strerror (-3); 70 ASSERT (str); 71 ASSERT (*str); 72 ASSERT (errno == 0 || errno == EINVAL); 73 74 return 0; 75 }