1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright (c) International Business Machines Corp., 2001 4 */ 5 6/*\ 7 * [Description] 8 * 9 * Testcase to test whether chdir(2) sets errno correctly. 10 */ 11 12#include <errno.h> 13#include "tst_test.h" 14 15static char long_dir[] = "abcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyz"; 16static char noexist_dir[] = "noexistdir"; 17 18static struct tcase { 19 char *dir; 20 int exp_errno; 21} tcases[] = { 22 {long_dir, ENAMETOOLONG}, 23 {noexist_dir, ENOENT}, 24 {0, EFAULT}, // bad_addr 25}; 26 27static void verify_chdir(unsigned int i) 28{ 29 TST_EXP_FAIL(chdir(tcases[i].dir), tcases[i].exp_errno, "chdir()"); 30} 31 32static void setup(void) 33{ 34 tcases[2].dir = tst_get_bad_addr(NULL); 35} 36 37static struct tst_test test = { 38 .needs_tmpdir = 1, 39 .test = verify_chdir, 40 .tcnt = ARRAY_SIZE(tcases), 41 .setup = setup, 42}; 43