summaryrefslogtreecommitdiffstats
path: root/ccan/list/test/run-list_del_from-assert.c
blob: 453dc0f22000bfd16dd5443a2ceecbc502505a46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#define CCAN_LIST_DEBUG 1
#include <ccan/list/list.h>
#include <ccan/tap/tap.h>
#include <ccan/list/list.c>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>

int main(int argc, char *argv[])
{
	struct list_head list1, list2;
	struct list_node n1, n2, n3;
	pid_t child;
	int status;

	(void)argc;
	(void)argv;

	plan_tests(1);
	list_head_init(&list1);
	list_head_init(&list2);
	list_add(&list1, &n1);
	list_add(&list2, &n2);
	list_add_tail(&list2, &n3);

	child = fork();
	if (child) {
		wait(&status);
	} else {
		close(2); /* Close stderr so we don't print confusing assert */
		/* This should abort. */
		list_del_from(&list1, &n3);
		exit(0);
	}

	ok1(WIFSIGNALED(status) && WTERMSIG(status) == SIGABRT);
	list_del_from(&list2, &n3);
	return exit_status();
}
OpenPOWER on IntegriCloud