/ tests / strerror.c
strerror.c
  1  /*-
  2   * Copyright (c) 2001 Wes Peters <wes@FreeBSD.org>
  3   * All rights reserved.
  4   *
  5   * Redistribution and use in source and binary forms, with or without
  6   * modification, are permitted provided that the following conditions
  7   * are met:
  8   * 1. Redistributions of source code must retain the above copyright
  9   *    notice, this list of conditions and the following disclaimer.
 10   * 2. Redistributions in binary form must reproduce the above copyright
 11   *    notice, this list of conditions and the following disclaimer in the
 12   *    documentation and/or other materials provided with the distribution.
 13   *
 14   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 15   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 16   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 17   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 18   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 19   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 20   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 21   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 22   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 23   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 24   * SUCH DAMAGE.
 25   *
 26   * $FreeBSD$
 27   */
 28  
 29  #include <assert.h>
 30  #include <errno.h>
 31  #include <limits.h>
 32  #include <stdio.h>
 33  #include <stdlib.h>
 34  #include <string.h>
 35  
 36  #include "darwintest.h"
 37  
 38  static char buf[64];
 39  static char *sret;
 40  static int iret;
 41  
 42  T_DECL(strerror, "")
 43  {
 44  	//T_DECL(strerror_unknown_error, "")
 45  	errno = 0;
 46  	sret = strerror(INT_MAX);
 47  	snprintf(buf, sizeof(buf), "Unknown error: %d", INT_MAX);
 48  	T_EXPECT_EQ_STR(sret, buf, NULL);
 49  	T_EXPECT_EQ(errno, EINVAL, NULL);
 50  
 51  	//T_DECL(strerror_no_error, "")
 52  	errno = 0;
 53  	sret = strerror(0);
 54  	T_EXPECT_EQ_STR(sret, "Undefined error: 0", NULL);
 55  	T_EXPECT_EQ(errno, 0, NULL);
 56  
 57  	//T_DECL(strerror_EPERM_test, "")
 58  	errno = 0;
 59  	sret = strerror(EPERM);
 60  	T_EXPECT_EQ_STR(sret, "Operation not permitted", NULL);
 61  	T_EXPECT_EQ(errno, 0, NULL);
 62  
 63  	//T_DECL(strerror_EPFNOSUPPORT_test, "")
 64  	errno = 0;
 65  	sret = strerror(EPFNOSUPPORT);
 66  	T_EXPECT_EQ_STR(sret, "Protocol family not supported", NULL);
 67  	T_EXPECT_EQ(errno, 0, NULL);
 68  
 69  	//T_DECL(strerror_ELAST_test, "")
 70  	errno = 0;
 71  	sret = strerror(ELAST);
 72  	T_EXPECT_EQ(errno, 0, NULL);
 73  }
 74  
 75  T_DECL(strerror_r, "")
 76  {
 77  	memset(buf, '*', sizeof(buf));
 78  	iret = strerror_r(-1, buf, sizeof(buf));
 79  	T_EXPECT_EQ_STR(buf, "Unknown error: -1", NULL);
 80  	T_EXPECT_EQ(iret, EINVAL, NULL);
 81  
 82  	//T_DECL(strerror_r__EPERM_one_byte_short, "")
 83  	memset(buf, '*', sizeof(buf));
 84  	/* One byte too short. */
 85  	iret = strerror_r(EPERM, buf, strlen("Operation not permitted"));
 86  	T_EXPECT_EQ_STR(buf, "Operation not permitte", NULL);
 87  	T_EXPECT_EQ(iret, ERANGE, NULL);
 88  
 89  	//T_DECL(strerror_r__EPERM_unknown_error_one_byte_short, "")
 90  	memset(buf, '*', sizeof(buf));
 91  	/* One byte too short. */
 92  	iret = strerror_r(-1, buf, strlen("Unknown error: -1"));
 93  	T_EXPECT_EQ_STR(buf, "Unknown error: -", NULL);
 94  	T_EXPECT_EQ(iret, EINVAL, NULL);
 95  
 96  	//T_DECL(strerror_r__EPERM_unknown_error_two_bytes_short, "")
 97  	memset(buf, '*', sizeof(buf));
 98  	/* Two bytes too short. */
 99  	iret = strerror_r(-2, buf, strlen("Unknown error: -2") - 1);
100  	T_EXPECT_EQ_STR(buf, "Unknown error: ", NULL);
101  	T_EXPECT_EQ(iret, EINVAL, NULL);
102  
103  	//T_DECL(strerror_r__EPERM_unknown_error_three_bytes_short, "")
104  	memset(buf, '*', sizeof(buf));
105  	/* Three bytes too short. */
106  	iret = strerror_r(-2, buf, strlen("Unknown error: -2") - 2);
107  	T_EXPECT_EQ_STR(buf, "Unknown error:", NULL);
108  	T_EXPECT_EQ(iret, EINVAL, NULL);
109  
110  	//T_DECL(strerror_r__EPERM_unknown_error_12345_one_byte_short, "")
111  	memset(buf, '*', sizeof(buf));
112  	/* One byte too short. */
113  	iret = strerror_r(12345, buf, strlen("Unknown error: 12345"));
114  	T_EXPECT_EQ_STR(buf, "Unknown error: 1234", NULL);
115  	T_EXPECT_EQ(iret, EINVAL, NULL);
116  
117  	//T_DECL(strerror_r__no_error, "")
118  	memset(buf, '*', sizeof(buf));
119  	iret = strerror_r(0, buf, sizeof(buf));
120  	T_EXPECT_EQ_STR(buf, "Undefined error: 0", NULL);
121  	T_EXPECT_EQ(iret, 0, NULL);
122  
123  	//T_DECL(strerror_r__EDEADLK, "")
124  	memset(buf, '*', sizeof(buf));
125  	iret = strerror_r(EDEADLK, buf, sizeof(buf));
126  	T_EXPECT_EQ_STR(buf, "Resource deadlock avoided", NULL);
127  	T_EXPECT_EQ(iret, 0, NULL);
128  
129  	//T_DECL(strerror_r__EPROCLIM, "")
130  	memset(buf, '*', sizeof(buf));
131  	iret = strerror_r(EPROCLIM, buf, sizeof(buf));
132  	T_EXPECT_EQ_STR(buf, "Too many processes", NULL);
133  	T_EXPECT_EQ(iret, 0, NULL);
134  }