| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | /* vi: set sw=4 ts=4 sts=4: *//* * signalfd test for uClibc * Copyright (C) 2012 by Kevin Cernekee <cernekee@gmail.com> * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <error.h>#include <signal.h>#include <sys/signalfd.h>#include <sys/fcntl.h>static intdo_test(void){	int fd, ret, result = 0;	struct signalfd_siginfo ssi;	sigset_t mask;	sigemptyset(&mask);	sigaddset(&mask, SIGUSR1);	sigprocmask(SIG_BLOCK, &mask, NULL);	fd = signalfd(-1, &mask, SFD_NONBLOCK);	if (fd < 0) {		printf("signalfd() failed: %s\n", strerror(errno));		result = 1;	}	/* this should return immediately with EAGAIN due to SFD_NONBLOCK */	memset(&ssi, 0, sizeof(ssi));	ret = read(fd, &ssi, sizeof(ssi));	if (ret != -1 || errno != EAGAIN) {		error(0, 0, "first read() returned %d", ret);		result = 1;	}	kill(getpid(), SIGUSR1);	/* this should return a struct ssi indicating receipt of SIGUSR1 */	ret = read(fd, &ssi, sizeof(ssi));	if (ret != sizeof(ssi)) {		error(0, 0, "second read() returned %d", ret);		result = 1;	}	if (ssi.ssi_signo != SIGUSR1) {		error(0, 0, "ssi contains bogus signo");		result = 1;	}	return result;}#define TIMEOUT 5#define TEST_FUNCTION do_test ()#include "../test-skeleton.c"
 |