Example #1
0
static void setup_every_copy()
{
	close(newdirfd);
	rmobj(TEST_DIR2, NULL);

	SUCCEED_OR_DIE(mkdir, "mkdir(%s, %o) failed: %s", TEST_DIR2, 0700);
	newdirfd = SUCCEED_OR_DIE(open, "open(%s, 0x%x) failed: %s", TEST_DIR2, O_DIRECTORY);
}
Example #2
0
static void mysymlinkat_test(struct test_struct *desc)
{
	int fd;

	TEST(mysymlinkat(desc->oldfn, *desc->newfd, desc->newfn));

	/* check return code */
	if (TEST_ERRNO == desc->expected_errno) {
		if (TEST_RETURN == 0 && desc->referencefn1 != NULL) {
			int tnum = rand(), vnum = ~tnum;
			int len;
			fd = SUCCEED_OR_DIE(open,
					    "open(%s, 0x%x) failed: %s",
					    desc->referencefn1, O_RDWR);
			if ((len =
			     write(fd, &tnum,
				   sizeof(tnum))) != sizeof(tnum))
				tst_brkm(TBROK, cleanup,
					 "write() failed: expected %zu, returned %d; error: %s",
					 sizeof(tnum), len,
					 strerror(errno));
			SUCCEED_OR_DIE(close, "close(%d) failed: %s",
				       fd);

			fd = SUCCEED_OR_DIE(open,
					    "open(%s, 0x%x) failed: %s",
					    desc->referencefn2,
					    O_RDONLY);
			if ((len =
			     read(fd, &vnum,
				  sizeof(vnum))) != sizeof(tnum))
				tst_brkm(TBROK, cleanup,
					 "read() failed: expected %zu, returned %d; error: %s",
					 sizeof(vnum), len,
					 strerror(errno));
			SUCCEED_OR_DIE(close, "close(%d) failed: %s",
				       fd);

			if (tnum == vnum)
				tst_resm(TPASS, "Test passed");
			else
				tst_resm(TFAIL,
					 "The link file's content isn't as same as the original file's "
					 "although symlinkat returned 0");
		} else {
			tst_resm(TPASS,
				 "symlinkat() returned the expected  errno %d: %s",
				 TEST_ERRNO, strerror(TEST_ERRNO));
		}
	} else {
		TEST_ERROR_LOG(TEST_ERRNO);
		tst_resm(TFAIL,
			 TEST_RETURN ==
			 0 ? "symlinkat() surprisingly succeeded" :
			 "symlinkat() Failed, errno=%d : %s", TEST_ERRNO,
			 strerror(TEST_ERRNO));
	}
}
Example #3
0
void test_unmasked_matching_noinfo(swi_func sigwaitinfo, int signo)
{
	sigset_t sigs;
	pid_t child;

	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
	/* Run a child that will wake us up */
	child=create_sig_proc(100000, signo, UINT_MAX);

	TEST(sigwaitinfo(&sigs, NULL, NULL));
	REPORT_SUCCESS(signo, 0);

	kill(child, SIGTERM);
}
Example #4
0
void test_bad_address3(swi_func sigwaitinfo, int signo)
{
	sigset_t sigs;
	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);

	TEST(sigwaitinfo(&sigs, NULL, (void*)1));
	REPORT_SUCCESS(-1, EFAULT);
}
Example #5
0
/***************************************************************
 * setup() - performs all ONE TIME setup for this test.
 ***************************************************************/
static void setup(void)
{
	char *tmp;

	tst_sig(NOFORK, DEF_HANDLER, cleanup);

	tst_tmpdir();

	SUCCEED_OR_DIE(mkdir, "mkdir(%s, %o) failed: %s", TEST_DIR1, 0700);
	SUCCEED_OR_DIE(mkdir, "mkdir(%s, %o) failed: %s", TEST_DIR3, 0700);
	olddirfd =
	    SUCCEED_OR_DIE(open, "open(%s, 0x%x) failed: %s", TEST_DIR1,
			   O_DIRECTORY);
	deldirfd =
	    SUCCEED_OR_DIE(open, "open(%s, 0x%x) failed: %s", TEST_DIR3,
			   O_DIRECTORY);
	SUCCEED_OR_DIE(rmdir, "rmdir(%s) failed: %s", TEST_DIR3);
	SUCCEED_OR_DIE(close, "close(%d) failed: %s",
		       SUCCEED_OR_DIE(open, "open(%s, 0x%x, %o) failed: %s",
				      TEST_DIR1 "/" TEST_FILE1,
				      O_CREAT | O_EXCL, 0600));

	/* gratuitous memory leak here */
	tmp = strdup(dpathname);
	snprintf(dpathname, sizeof(dpathname), tmp, get_current_dir_name());

	TEST_PAUSE;
}
Example #6
0
void test_bad_address(swi_func sigwaitinfo, int signo)
{
	sigset_t sigs, oldmask;
	pid_t child;

	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
	/* let's not get interrupted by our dying child */
	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, SIGCHLD);

	SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &sigs, &oldmask);

	/* don't wait on a SIGCHLD */
	SUCCEED_OR_DIE(sigdelset, "sigaddset failed", &sigs, SIGCHLD);

	/* Run a child that will wake us up */
	child=create_sig_proc(0, signo, 1);

	TEST(sigwaitinfo(&sigs, (void*)1, NULL));
	REPORT_SUCCESS(-1, EFAULT);

	SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &oldmask, &oldmask);

	kill(child, SIGTERM);
}
Example #7
0
void test_masked_matching_noinfo(swi_func sigwaitinfo, int signo)
{
	sigset_t sigs, oldmask;
	pid_t child;

	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
	/* let's not get interrupted by our dying child */
	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, SIGCHLD);

	SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &sigs, &oldmask);

	/* don't wait on a SIGCHLD */
	SUCCEED_OR_DIE(sigdelset, "sigaddset failed", &sigs, SIGCHLD);

	/* Run a child that will wake us up */
	child=create_sig_proc(0, signo, 1);

	TEST(sigwaitinfo(&sigs, NULL, NULL));
	REPORT_SUCCESS(signo, 0);

	SUCCEED_OR_DIE(sigprocmask, "restoring original signal mask failed", SIG_SETMASK, &oldmask, &oldmask);

	Tst_count--;

	if(sigismember(&oldmask, signo))
		tst_resm(TPASS, "sigwaitinfo restored the original mask");
	else
		tst_resm(TFAIL, "sigwaitinfo failed to restore the original mask");

}
Example #8
0
void test_timeout(swi_func sigwaitinfo, int signo)
{
	sigset_t sigs;
	siginfo_t si;
	pid_t child;
	struct timespec ts = {.tv_sec = 1 };

	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);

	/* Run a child that will wake us up */
	child = create_sig_proc(100000, signo, UINT_MAX);

	TEST(sigwaitinfo(&sigs, &si, &ts));
	REPORT_SUCCESS(-1, EAGAIN);

	kill(child, SIGTERM);
}

/* Note: sigwait-ing for a signal that is not blocked is unspecified
 * by POSIX; but works for non-ignored signals under Linux
 */
void test_unmasked_matching(swi_func sigwaitinfo, int signo)
{
	sigset_t sigs;
	siginfo_t si;
	pid_t child;

	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);

	/* Run a child that will wake us up */
	child = create_sig_proc(100000, signo, UINT_MAX);

	TEST(sigwaitinfo(&sigs, &si, NULL));
	REPORT_SUCCESS_COND(signo, 0, si.si_pid == child
			    && si.si_code == SI_USER
			    && si.si_signo == signo, "Struct siginfo mismatch");

	kill(child, SIGTERM);
}
Example #9
0
void test_empty_set(swi_func sigwaitinfo, int signo)
{
	sigset_t sigs;
	siginfo_t si;
	pid_t child;

	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
	/* Run a child that will wake us up */
	child=create_sig_proc(100000, signo, UINT_MAX);

	TEST(sigwaitinfo(&sigs, &si, NULL));
	REPORT_SUCCESS(-1, EINTR);

	kill(child, SIGTERM);
}
Example #10
0
void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
{
	sigset_t sigs, oldmask;
	siginfo_t si;
	pid_t child[2];

	signo = SIGRTMIN + 1;

	SUCCEED_OR_DIE(sigemptyset, "sigemptyset failed", &sigs);
	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo);
	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, signo + 1);
	/* let's not get interrupted by our dying child */
	SUCCEED_OR_DIE(sigaddset, "sigaddset failed", &sigs, SIGCHLD);

	SUCCEED_OR_DIE(sigprocmask, "sigprocmask failed", SIG_SETMASK, &sigs,
		       &oldmask);

	/* don't wait on a SIGCHLD */
	SUCCEED_OR_DIE(sigdelset, "sigdelset failed", &sigs, SIGCHLD);

	/* Run a child that will wake us up */
	child[0] = create_sig_proc(0, signo, 1);
	child[1] = create_sig_proc(0, signo + 1, 1);

	TEST(sigwaitinfo(&sigs, &si, NULL));
	REPORT_SUCCESS_COND(signo, 0, si.si_pid == child[0]
			    && si.si_code == SI_USER
			    && si.si_signo == signo, "Struct siginfo mismatch");

	/* eat the other signal */
	Tst_count--;
	TEST(sigwaitinfo(&sigs, &si, NULL));
	REPORT_SUCCESS_COND(signo + 1, 0, si.si_pid == child[1]
			    && si.si_code == SI_USER
			    && si.si_signo == signo + 1,
			    "Struct siginfo mismatch");

	SUCCEED_OR_DIE(sigprocmask, "restoring original signal mask failed",
		       SIG_SETMASK, &oldmask, &oldmask);

	Tst_count--;

	if (sigismember(&oldmask, signo))
		tst_resm(TPASS, "sigwaitinfo restored the original mask");
	else
		tst_resm(TFAIL,
			 "sigwaitinfo failed to restore the original mask");
}
Example #11
0
File: linkat01.c Project: 1587/ltp
void setup(void)
{
	char *cwd;

	tst_sig(NOFORK, DEF_HANDLER, cleanup);

	tst_tmpdir();

	cwd = get_current_dir_name();
	if (cwd == NULL)
		tst_brkm(TFAIL | TERRNO, cleanup,
			 "Failed to get current working directory");
	else {

		SUCCEED_OR_DIE(mkdir, "mkdir(%s, %o) failed", TEST_DIR1, 0700);
		SUCCEED_OR_DIE(mkdir, "mkdir(%s, %o) failed", TEST_DIR3, 0700);
		olddirfd = SUCCEED_OR_DIE(open, "open(%s, 0x%x) failed",
					  TEST_DIR1, O_DIRECTORY);
		deldirfd = SUCCEED_OR_DIE(open, "open(%s, 0x%x) failed",
					  TEST_DIR3, O_DIRECTORY);
		SUCCEED_OR_DIE(rmdir, "rmdir(%s) failed", TEST_DIR3);
		SUCCEED_OR_DIE(close, "close(%d) failed",
			       SUCCEED_OR_DIE(open, "open(%s, 0x%x, %o) "
					      "failed",
					      TEST_DIR1 "/" TEST_FILE1,
					      O_CREAT | O_EXCL, 0600));

		SUCCEED_OR_DIE(mkfifo, "mkfifo(%s, %o) failed",
			       TEST_DIR1 "/" TEST_FIFO, 0600);

		snprintf(dpathname, sizeof(dpathname), DPATHNAME_FMT, cwd);
		snprintf(spathname, sizeof(spathname), SPATHNAME_FMT, cwd);

		free(cwd);

		TEST_PAUSE;

	}

}