Ejemplo n.º 1
0
int main(int ac, char **av)
{
	int *fildes, j;
	int ifile;
	char pfilname[40];
	int min;
	int freefds;
	int lc;			/* loop counter */
	char *msg;		/* message returned from parse_opts */

	ifile = -1;

	if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL)
		tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);

	min = getdtablesize();
	freefds = cnt_free_fds(min);
	fildes = (int *)malloc((min + 5) * sizeof(int));
	local_flag = PASSED;

	for (lc = 0; TEST_LOOPING(lc); lc++) {

		for (j = 0; j < min + 5; j++)
			fildes[j] = 0;

		sprintf(pfilname, "dup06.%d\n", getpid());
		unlink(pfilname);
		if ((fildes[0] = creat(pfilname, 0666)) == -1) {
			tst_resm(TFAIL, "Cannot open first file");
			local_flag = FAILED;
		} else {
			for (ifile = 1; ifile < min + 5; ifile++) {
				if ((fildes[ifile] =
				     dup(fildes[ifile - 1])) == -1) {
					break;
				}

			}
			if (ifile < freefds) {
				tst_resm(TFAIL, "Not enough files duped");
				local_flag = FAILED;
			} else if (ifile > freefds) {
				tst_resm(TFAIL, "Too many files duped");
				local_flag = FAILED;
			}
		}
		unlink(pfilname);

		if (ifile > 0)
			close(fildes[ifile - 1]);

		if (local_flag == PASSED)
			tst_resm(TPASS, "Test passed.");
		else
			tst_resm(TFAIL, "Test failed.");

	}
	tst_exit();

}
Ejemplo n.º 2
0
Archivo: dup06.c Proyecto: 1587/ltp
int main(int ac, char **av)
{
	int *fildes, i;
	int min;
	int freefds;
	int lc;
	const char *pfilname = "dup06";

	tst_parse_opts(ac, av, NULL, NULL);

	setup();

	min = getdtablesize();
	freefds = cnt_free_fds(min);
	fildes = malloc((min + 5) * sizeof(int));

	for (i = 0; i < min + 5; i++)
		fildes[i] = 0;

	for (lc = 0; TEST_LOOPING(lc); lc++) {
		unlink(pfilname);

		if ((fildes[0] = creat(pfilname, 0666)) == -1) {
			tst_resm(TFAIL, "Cannot open first file");
		} else {
			for (i = 1; i < min + 5; i++) {
				if ((fildes[i] = dup(fildes[i - 1])) == -1)
					break;
			}
			if (i < freefds) {
				tst_resm(TFAIL, "Not enough files duped");
			} else if (i > freefds) {
				tst_resm(TFAIL, "Too many files duped");
			} else {
				tst_resm(TPASS, "Test passed.");
			}
		}

		unlink(pfilname);

		for (i = 0; i < min + 5; i++) {
			if (fildes[i] != 0 && fildes[i] != -1)
				close(fildes[i]);

			fildes[i] = 0;
		}
	}

	cleanup();
	tst_exit();
}