#include <assert.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "darwintest.h"
static char buf[64];
static char *sret;
static int iret;
T_DECL(strerror, "")
{
errno = 0;
sret = strerror(INT_MAX);
snprintf(buf, sizeof(buf), "Unknown error: %d", INT_MAX);
T_EXPECT_EQ_STR(sret, buf, NULL);
T_EXPECT_EQ(errno, EINVAL, NULL);
errno = 0;
sret = strerror(0);
T_EXPECT_EQ_STR(sret, "Undefined error: 0", NULL);
T_EXPECT_EQ(errno, 0, NULL);
errno = 0;
sret = strerror(EPERM);
T_EXPECT_EQ_STR(sret, "Operation not permitted", NULL);
T_EXPECT_EQ(errno, 0, NULL);
errno = 0;
sret = strerror(EPFNOSUPPORT);
T_EXPECT_EQ_STR(sret, "Protocol family not supported", NULL);
T_EXPECT_EQ(errno, 0, NULL);
errno = 0;
sret = strerror(ELAST);
T_EXPECT_EQ(errno, 0, NULL);
}
T_DECL(strerror_r, "")
{
memset(buf, '*', sizeof(buf));
iret = strerror_r(-1, buf, sizeof(buf));
T_EXPECT_EQ_STR(buf, "Unknown error: -1", NULL);
T_EXPECT_EQ(iret, EINVAL, NULL);
memset(buf, '*', sizeof(buf));
iret = strerror_r(EPERM, buf, strlen("Operation not permitted"));
T_EXPECT_EQ_STR(buf, "Operation not permitte", NULL);
T_EXPECT_EQ(iret, ERANGE, NULL);
memset(buf, '*', sizeof(buf));
iret = strerror_r(-1, buf, strlen("Unknown error: -1"));
T_EXPECT_EQ_STR(buf, "Unknown error: -", NULL);
T_EXPECT_EQ(iret, EINVAL, NULL);
memset(buf, '*', sizeof(buf));
iret = strerror_r(-2, buf, strlen("Unknown error: -2") - 1);
T_EXPECT_EQ_STR(buf, "Unknown error: ", NULL);
T_EXPECT_EQ(iret, EINVAL, NULL);
memset(buf, '*', sizeof(buf));
iret = strerror_r(-2, buf, strlen("Unknown error: -2") - 2);
T_EXPECT_EQ_STR(buf, "Unknown error:", NULL);
T_EXPECT_EQ(iret, EINVAL, NULL);
memset(buf, '*', sizeof(buf));
iret = strerror_r(12345, buf, strlen("Unknown error: 12345"));
T_EXPECT_EQ_STR(buf, "Unknown error: 1234", NULL);
T_EXPECT_EQ(iret, EINVAL, NULL);
memset(buf, '*', sizeof(buf));
iret = strerror_r(0, buf, sizeof(buf));
T_EXPECT_EQ_STR(buf, "Undefined error: 0", NULL);
T_EXPECT_EQ(iret, 0, NULL);
memset(buf, '*', sizeof(buf));
iret = strerror_r(EDEADLK, buf, sizeof(buf));
T_EXPECT_EQ_STR(buf, "Resource deadlock avoided", NULL);
T_EXPECT_EQ(iret, 0, NULL);
memset(buf, '*', sizeof(buf));
iret = strerror_r(EPROCLIM, buf, sizeof(buf));
T_EXPECT_EQ_STR(buf, "Too many processes", NULL);
T_EXPECT_EQ(iret, 0, NULL);
}