Loading...
#include <sys/param.h> #include <errno.h> #include <libgen.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <darwintest.h> #include <darwintest_utils.h> #define TOOLONG (MAXPATHLEN + 16) T_DECL(basename_r_null, "Test basename_r(3) NULL handling") { char *ret, buf[32]; pid_t pid; int exitcode, sig; /* NULL argument handling */ ret = basename_r(NULL, buf); T_EXPECT_EQ_STR(".", ret, "basename_r(NULL, buf)"); sig = 0; pid = fork(); if (pid == 0) { ret = basename_r(NULL, NULL); _Exit(0); } dt_waitpid(pid, &exitcode, &sig, 5); T_ASSERT_EQ(sig, SIGSEGV, "basename_r(NULL, NULL)"); sig = 0; pid = fork(); if (pid == 0) { ret = dirname_r("./foo/bar", NULL); _Exit(0); } dt_waitpid(pid, &exitcode, &sig, 5); T_ASSERT_EQ(sig, SIGSEGV, "basename_r('./foo/bar', NULL)"); } T_DECL(basename_r_pathlen, "Test basename_r(3) MAXPATHLEN handling") { char buf[TOOLONG + 1] = {0}; char dst[TOOLONG + 1] = {0}; /* MAXPATHLEN handling */ memset(buf, 'a', TOOLONG); T_ASSERT_NULL(basename_r(buf, dst), NULL); T_ASSERT_EQ(errno, ENAMETOOLONG, NULL); buf[TOOLONG - MAXPATHLEN - 1] = '/'; T_ASSERT_NULL(basename_r(buf, dst), NULL); T_ASSERT_EQ(errno, ENAMETOOLONG, NULL); buf[TOOLONG - MAXPATHLEN - 1] = 'a'; buf[TOOLONG - MAXPATHLEN] = '/'; T_ASSERT_NOTNULL(basename_r(buf, dst), NULL); } |