* conform/conformtest.pl: Run Unix tests for XPG6.
	Implement handling of known namespace violations.
	Improve printing of results.

	* posix/unistd.h (usleep): Correct return type.
	* sysdeps/unix/sysv/linux/usleep.c: Correct return type.
	* sysdeps/unix/bsd/usleep.c: Correct return type.
	* sysdeps/mach/usleep.c: Correct return type.
	* sysdeps/generic/usleep.c: Correct return type.

	* posix/unistd.h (sync): Correct return type.
	* sysdeps/generic/sync.c: Likewise.
	* sysdeps/mach/hurd/sync.c: Likewise.

	* sysdeps/generic/bits/confname.h (_SC_IOV_MAX): New definition.
This commit is contained in:
Ulrich Drepper 2001-01-25 09:33:04 +00:00
parent 49833554e3
commit 7287c36dd8
12 changed files with 129 additions and 69 deletions

View File

@ -1,5 +1,21 @@
2001-01-25 Ulrich Drepper <drepper@redhat.com>
* conform/conformtest.pl: Run Unix tests for XPG6.
Implement handling of known namespace violations.
Improve printing of results.
* posix/unistd.h (usleep): Correct return type.
* sysdeps/unix/sysv/linux/usleep.c: Correct return type.
* sysdeps/unix/bsd/usleep.c: Correct return type.
* sysdeps/mach/usleep.c: Correct return type.
* sysdeps/generic/usleep.c: Correct return type.
* posix/unistd.h (sync): Correct return type.
* sysdeps/generic/sync.c: Likewise.
* sysdeps/mach/hurd/sync.c: Likewise.
* sysdeps/generic/bits/confname.h (_SC_IOV_MAX): New definition.
* posix/unistd.h: Make seteuid and setegid available for XPG6.
* wcsmbs/wchar.h: Get FILE definition for XPG5.

View File

@ -1,5 +1,5 @@
/* `sysconf', `pathconf', and `confstr' NAME values. Generic version.
Copyright (C) 1993, 1995-1998, 2000 Free Software Foundation, Inc.
Copyright (C) 1993, 1995-1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -185,6 +185,8 @@ enum
#define _SC_SELECT _SC_SELECT
_SC_UIO_MAXIOV,
#define _SC_UIO_MAXIOV _SC_UIO_MAXIOV
_SC_IOV_MAX = _SC_UIO_MAXIOV,
#define _SC_IOV_MAX _SC_IOV_MAX
_SC_PII_INTERNET_STREAM,
#define _SC_PII_INTERNET_STREAM _SC_PII_INTERNET_STREAM
_SC_PII_INTERNET_DGRAM,

View File

@ -1,26 +1,28 @@
#! /usr/bin/perl
$CC = "gcc";
$CFLAGS = "-I. '-D__attribute__(x)=' -D_XOPEN_SOURCE=500";
$CFLAGS = "-I. '-D__attribute__(x)=' -D_XOPEN_SOURCE=600";
# List of the headers we are testing.
@headers = ("wordexp.h", "wctype.h", "wchar.h", "varargs.h", "utmpx.h",
"utime.h", "unistd.h", "ulimit.h", "ucontext.h", "time.h",
"termios.h", "tar.h", "sys/wait.h", "sys/utsname.h", "sys/un.h",
"sys/uio.h", "sys/types.h", "sys/times.h", "sys/timeb.h",
"sys/time.h", "sys/statvfs.h", "sys/stat.h", "sys/socket.h",
"sys/shm.h", "sys/sem.h", "sys/resource.h", "sys/msg.h",
"sys/mman.h", "sys/ipc.h", "syslog.h", "stropts.h", "strings.h",
"string.h", "stdlib.h", "stdio.h", "stddef.h", "stdarg.h",
"spawn.h", "signal.h", "setjmp.h", "semaphore.h",
"search.h", "sched.h", "regex.h", "pwd.h", "pthread.h",
"poll.h", "nl_types.h", "netinet/tcp.h", "netinet/in.h",
"net/if.h", "netdb.h", "ndbm.h", "mqueue.h", "monetary.h",
"math.h", "locale.h", "libgen.h", "limits.h", "langinfo.h",
"iso646.h", "inttypes.h", "iconv.h", "grp.h", "glob.h", "ftw.h",
"fnmatch.h", "fmtmsg.h", "float.h", "fcntl.h", "errno.h",
"dlfcn.h", "dirent.h", "ctype.h", "cpio.h", "assert.h",
"arpa/inet.h", "aio.h");
"utime.h", "unistd.h", "ulimit.h", "ucontext.h", "time.h",
"termios.h", "tar.h", "sys/wait.h", "sys/utsname.h", "sys/un.h",
"sys/uio.h", "sys/types.h", "sys/times.h", "sys/timeb.h",
"sys/time.h", "sys/statvfs.h", "sys/stat.h", "sys/socket.h",
"sys/shm.h", "sys/sem.h", "sys/resource.h", "sys/msg.h",
"sys/mman.h", "sys/ipc.h", "syslog.h", "stropts.h", "strings.h",
"string.h", "stdlib.h", "stdio.h", "stddef.h", "stdarg.h",
"spawn.h", "signal.h", "setjmp.h", "semaphore.h",
"search.h", "sched.h", "regex.h", "pwd.h", "pthread.h",
"poll.h", "nl_types.h", "netinet/tcp.h", "netinet/in.h",
"net/if.h", "netdb.h", "ndbm.h", "mqueue.h", "monetary.h",
"math.h", "locale.h", "libgen.h", "limits.h", "langinfo.h",
"iso646.h", "inttypes.h", "iconv.h", "grp.h", "glob.h", "ftw.h",
"fnmatch.h", "fmtmsg.h", "float.h", "fcntl.h", "errno.h",
"dlfcn.h", "dirent.h", "ctype.h", "cpio.h", "assert.h",
"arpa/inet.h", "aio.h");
@headers = ('unistd.h');
# These are the ISO C99 keywords.
@keywords = ('auto', 'break', 'case', 'char', 'const', 'continue', 'default',
@ -29,14 +31,23 @@ $CFLAGS = "-I. '-D__attribute__(x)=' -D_XOPEN_SOURCE=500";
'short', 'signed', 'sizeof', 'static', 'struct', 'switch',
'typedef', 'union', 'unsigned', 'void', 'volatile', 'while');
# These are symbols which are known to pollute the namespace.
@knownproblems = ('unix', 'linux', 'i386');
# Some headers need a bit more attention.
$mustprepend{'regex.h'} = "#include <sys/types.h>\n";
$mustprepend{'wordexp.h'} = "#include <stddef.h>\n";
# Make an hash table from this information.
while ($#keywords) {
# Make a hash table from this information.
while ($#keywords >= 0) {
$iskeyword{pop (@keywords)} = 1;
}
# Make a hash table from the known problems.
while ($#knownproblems >= 0) {
$isknown{pop (@knownproblems)} = 1;
}
$tmpdir = "/tmp";
$verbose = 1;
@ -179,31 +190,29 @@ sub runtest
sub newtoken {
my($token, $nerrors, @allow) = @_;
my($token, @allow) = @_;
my($idx);
if ($token =~ /^[0-9_]/ || $iskeyword{$token}) {
return $nerrors;
}
return if ($token =~ /^[0-9_]/ || $iskeyword{$token});
for ($idx = 0; $idx <= $#allow; ++$idx) {
if (poorfnmatch ($allow[$idx], $token)) {
return $nerrors;
}
return if (poorfnmatch ($allow[$idx], $token));
}
++$nerrors;
if ($nerrors == 1) {
printf ("FAIL\n " . "-" x 72 . "\n");
if ($isknown{$token}) {
++$nknown;
} else {
++$nerrors;
if ($nerrors == 1) {
printf ("FAIL\n " . "-" x 72 . "\n");
}
printf (" Namespace violation: \"%s\"\n", $token);
}
printf (" Namespace violation: \"%s\"\n", $token);
return $nerrors;
}
sub checknamespace {
my($h, $fnamebase, @allow) = @_;
my($nerrors) = 0;
++$total;
@ -212,12 +221,14 @@ sub checknamespace {
print TESTFILE "#include <$h>\n";
close (TESTFILE);
$nerrors = 0;
$nknown = 0;
open (CONTENT, "$CC $CFLAGS -E $fnamebase.c -P -Wp,-dN | sed -e '/^# [1-9]/d' -e '/^[[:space:]]*\$/d' |");
loop: while (<CONTENT>) {
next loop if (/^#undef /);
chop;
if (/^#define (.*)/) {
$nerrors = newtoken ($1, $nerrors, @allow);
newtoken ($1, @allow);
} else {
# We have to tokenize the line.
my($str) = $_;
@ -226,7 +237,7 @@ sub checknamespace {
foreach $token (split(/[^a-zA-Z0-9_]/, $str)) {
if ($token ne "") {
$nerrors = newtoken ($token, $nerrors, @allow);
newtoken ($token, @allow);
}
}
}
@ -236,6 +247,9 @@ sub checknamespace {
if ($nerrors != 0) {
printf (" " . "-" x 72 . "\n");
++$errors;
} elsif ($nknown > 0) {
printf ("EXPECTED FAILURES\n");
++$known;
} else {
printf ("OK\n");
}
@ -272,7 +286,7 @@ while ($#headers >= 0) {
next control if (/^#/);
next control if (/^[ ]*$/);
if (/^element *({([^}]*)}|([^ ]*)) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_]*) *(.*)/) {
if (/^element *({([^}]*)}|([^{ ]*)) *({([^}]*)}|([^{ ]*)) *([A-Za-z0-9_]*) *(.*)/) {
my($struct) = "$2$3";
my($type) = "$5$6";
my($member) = "$7";
@ -726,8 +740,30 @@ while ($#headers >= 0) {
}
printf "-" x 76 . "\n";
printf (" Total number of tests : %4d\n", $total);
printf (" Number of failed tests : %4d (%3d%%)\n", $errors, ($errors * 100) / $total);
printf (" Number of skipped tests: %4d (%3d%%)\n", $skipped, ($skipped * 100) / $total);
printf (" Total number of tests : %4d\n", $total);
printf (" Number of known failures: %4d (", $known);
$percent = ($known * 100) / $total;
if ($percent < 1.0) {
printf (" <1%%)\n");
} else {
printf ("%3d%%)\n", $percent);
}
printf (" Number of failed tests : %4d (", $errors);
$percent = ($errors * 100) / $total;
if ($percent < 1.0) {
printf (" <1%%)\n");
} else {
printf ("%3d%%)\n", $percent);
}
printf (" Number of skipped tests : %4d (", $skipped);
$percent = ($skipped * 100) / $total;
if ($percent < 1.0) {
printf (" <1%%)\n");
} else {
printf ("%3d%%)\n", $percent);
}
exit $errors != 0;

View File

@ -5,7 +5,7 @@ constant _XOPEN_XCU_VERSION
constant _POSIX2_C_BIND
constant _POSIX2_CHAR_TERM
constant _POSIX2_LOCALDEF
constant _POSIX2_LOCALEDEF
constant _POSIX2_UPE
constant _POSIX2_VERSION
@ -232,8 +232,8 @@ constant _SC_XOPEN_REALTIME_THREADS
constant _SC_STREAMS
constant _SC_XBS5_ILP32_OFF32
constant _SC_XBS5_ILP32_OFFBIG
constant _SC_XBS5_ILP64_OFF64
constant _SC_XBS5_ILPIBIG_OFFBIG
constant _SC_XBS5_LP64_OFF64
constant _SC_XBS5_LPBIG_OFFBIG
constant F_LOCK
constant F_ULOCK
@ -283,7 +283,8 @@ function int close (int)
function size_t confstr (int, char*, size_t)
function {char*} crypt (const char*, const char*)
function {char*} ctermid (char*)
function {char*} cuserid (char*)
// cuserid got removed in XPG6
allow cuserid
function int dup (int)
function int dup2 (int, int)
function void encrypt (char[64], int)
@ -291,7 +292,7 @@ function int execl (const char*, const char*, ...)
function int execle (const char*, const char*, ...)
function int execlp (const char*, const char*, ...)
function int execv (const char*, char *const[])
function int execve (const char*, char *const[])
function int execve (const char*, char *const[], char *const[])
function int execvp (const char*, char *const[])
function void _exit (int)
function int fchown (int, uid_t, gid_t)
@ -317,7 +318,7 @@ function pid_t getpgid (pid_t)
function pid_t getpgrp (void)
function pid_t getpid (void)
function pid_t getppid (void)
function pid_t getsid (void)
function pid_t getsid (pid_t)
function uid_t getuid (void)
function {char*} getwd (char*)
function int isatty (int)
@ -346,7 +347,7 @@ function int setreuid (uid_t, uid_t)
function pid_t setsid (void)
function int setuid (uid_t)
function {unsigned int} sleep (unsigned int)
function void swab (const char*, void*, ssize_t)
function void swab (const void*, void*, ssize_t)
function int symlink (const char*, const char*)
function void sync (void)
function {long int} sysconf (int)

View File

@ -380,7 +380,7 @@ extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
/* Sleep USECONDS microseconds, or until a signal arrives that is not blocked
or ignored. */
extern void usleep (__useconds_t __useconds) __THROW;
extern int usleep (__useconds_t __useconds) __THROW;
#endif
@ -704,7 +704,7 @@ extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __THROW;
/* Return the login name of the user. */
extern char *getlogin (void) __THROW;
#ifdef __USE_REENTRANT
#if defined __USE_REENTRANT || defined __USE_UNIX98
/* Return at most NAME_LEN characters of the login name of the user in NAME.
If it cannot be determined or some other error occurred, return the error
code. Otherwise return 0. */
@ -805,7 +805,7 @@ extern int daemon (int __nochdir, int __noclose) __THROW;
extern long int gethostid (void) __THROW;
/* Make all changes done to all files actually appear on disk. */
extern int sync (void) __THROW;
extern void sync (void) __THROW;
/* Return the number of bytes in a page. This is the system's page size,

View File

@ -1,5 +1,5 @@
/* `sysconf', `pathconf', and `confstr' NAME values. Generic version.
Copyright (C) 1993, 1995-1998, 2000 Free Software Foundation, Inc.
Copyright (C) 1993, 1995-1998, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -185,6 +185,8 @@ enum
#define _SC_SELECT _SC_SELECT
_SC_UIO_MAXIOV,
#define _SC_UIO_MAXIOV _SC_UIO_MAXIOV
_SC_IOV_MAX = _SC_UIO_MAXIOV,
#define _SC_IOV_MAX _SC_IOV_MAX
_SC_PII_INTERNET_STREAM,
#define _SC_PII_INTERNET_STREAM _SC_PII_INTERNET_STREAM
_SC_PII_INTERNET_DGRAM,

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1995, 1996, 1997, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -20,11 +20,10 @@
#include <unistd.h>
/* Make all changes done to all files actually appear on disk. */
int
void
sync ()
{
__set_errno (ENOSYS);
return -1;
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
/* Copyright (C) 1991,1995,1996,1997,1999,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -16,13 +16,16 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <errno.h>
#include <unistd.h>
/* Sleep USECONDS microseconds, or until a previously set timer goes off. */
void
int
usleep (useconds)
useconds_t useconds;
{
__set_errno (ENOSYS);
return -1;
}
stub_warning (usleep)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1991,1992,1993,1994,1997,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -21,12 +21,11 @@
#include <hurd.h>
/* Make all changes done to all files actually appear on disk. */
int
void
sync ()
{
/* This is not actually synchronous; we don't wait. */
error_t err = __USEPORT (CRDIR, __file_syncfs (port, 0, 1));
if (err)
return __hurd_fail (err);
return 0;
(void) __hurd_fail (err);
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1992, 93, 94, 97, 98, 99 Free Software Foundation, Inc.
/* Copyright (C) 1992, 93, 94, 97, 98, 99, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -22,7 +22,7 @@
#include <unistd.h>
/* Sleep USECONDS microseconds, or until a previously set timer goes off. */
void
int
usleep (useconds_t useconds)
{
mach_port_t recv;
@ -31,10 +31,12 @@ usleep (useconds_t useconds)
recv = __mach_reply_port ();
if (__gettimeofday (&before, NULL) < 0)
return;
return -1;
(void) __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT,
0, 0, recv, (useconds + 999) / 1000, MACH_PORT_NULL);
__mach_port_destroy (mach_task_self (), recv);
if (__gettimeofday (&after, NULL) < 0)
return;
return -1;
return 0;
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1992, 1996, 1999 Free Software Foundation, Inc.
/* Copyright (C) 1992, 1996, 1999, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -21,7 +21,7 @@
#include <sys/time.h>
/* Sleep USECONDS microseconds, or until a previously set timer goes off. */
void
int
usleep (useconds)
useconds_t useconds;
{
@ -30,6 +30,6 @@ usleep (useconds)
delay.tv_sec = 0;
delay.tv_usec = useconds;
(void) __select (0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL,
return __select (0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL,
&delay);
}

View File

@ -1,5 +1,5 @@
/* Implementation of the BSD usleep function using nanosleep.
Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -21,11 +21,11 @@
#include <time.h>
#include <unistd.h>
void
int
usleep (useconds_t useconds)
{
struct timespec ts = { tv_sec: (long int) (useconds / 1000000),
tv_nsec: (long int) (useconds % 1000000) * 1000ul };
__nanosleep (&ts, NULL);
return __nanosleep (&ts, NULL);
}