Switch to upstream alarm(3).

The only way the setitimer call can fail is if the unsigned number of seconds is
too large to fit in the kernel's signed number of seconds. If you schedule a
68-year alarm, glibc will fail by returning 0 and BSD will fail by returning -1.

Change-Id: Ic3721b01428f5402d99f31fd7f2ba2cc58805607
This commit is contained in:
Elliott Hughes 2014-03-03 14:38:20 -08:00
parent dfeb42ede6
commit aedb00d04e
3 changed files with 10 additions and 17 deletions

View File

@ -104,7 +104,6 @@ libc_common_src_files := \
stdlib/putenv.c \
stdlib/setenv.c \
stdlib/strtod.c \
unistd/alarm.c \
unistd/syslog.c \
unistd/time.c \
@ -316,6 +315,7 @@ libc_upstream_netbsd_src_files := \
upstream-netbsd/lib/libc/unistd/killpg.c \
libc_upstream_openbsd_src_files := \
upstream-openbsd/lib/libc/gen/alarm.c \
upstream-openbsd/lib/libc/gen/exec.c \
upstream-openbsd/lib/libc/gen/fnmatch.c \
upstream-openbsd/lib/libc/gen/ftok.c \

View File

@ -1,3 +1,4 @@
/* $OpenBSD: alarm.c,v 1.7 2005/08/08 08:05:33 espie Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
@ -10,7 +11,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4. Neither the name of the University nor the names of its contributors
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@ -27,12 +28,6 @@
* SUCH DAMAGE.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)alarm.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
//__FBSDID("$FreeBSD: /repoman/r/ncvs/src/lib/libc/gen/alarm.c,v 1.3 2007/01/09 00:27:53 imp Exp $");
/*
* Backwards compatible alarm.
*/
@ -40,22 +35,16 @@ static char sccsid[] = "@(#)alarm.c 8.1 (Berkeley) 6/4/93";
#include <unistd.h>
unsigned int
alarm(secs)
unsigned int secs;
alarm(unsigned int secs)
{
struct itimerval it, oitv;
struct itimerval *itp = &it;
itp->it_interval.tv_usec = 0;
itp->it_interval.tv_sec = 0;
timerclear(&itp->it_interval);
itp->it_value.tv_sec = secs;
itp->it_value.tv_usec = 0;
if (setitimer(ITIMER_REAL, itp, &oitv) < 0)
#if 1 /* BIONIC: Same behaviour than GLibc for errors */
return 0;
#else
return (-1);
#endif
return ((unsigned int) -1);
if (oitv.it_value.tv_usec)
oitv.it_value.tv_sec++;
return (oitv.it_value.tv_sec);

View File

@ -112,3 +112,7 @@ TEST(unistd, read_EBADF) {
ASSERT_EQ(-1, read(-1, buf, sizeof(buf)));
ASSERT_EQ(EBADF, errno);
}
TEST(unistd, alarm) {
ASSERT_EQ(0U, alarm(0));
}