| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | /* Tests for AIO in librt.
 | 
					
						
							| 
									
										
											  
											
												* locale/programs/ld-ctype.c (ctype_read): When given a repertoire
	name of "", store a null pointer instead.
	* configure.in (elf): Set to yes for freebsd*, netbsd*.
	* configure: Regenerated.
	* locale/xlocale.c [! (USE_TLS && HAVE___THREAD)] (__libc_tsd_LOCALE):
	Initialize this instead of __libc_tsd_LOCALE_data.
	* sysdeps/unix/grantpt.c (pts_name): Convert ENOTTY return from
	ptsname_r to EINVAL.
	* sysdeps/generic/ptsname.c (__ptsname_r): Return ENOSYS instead of 0.
	* rt/Makefile: Revert last change, it was inappropriate to presume aio
	implementations depend on pthreads.
	* rt/tst-aio.c (do_test): Exit happy if first failure is ENOSYS.
	* rt/tst-aio64.c (do_test): Likewise.
	* rt/tst-aio2.c (do_test): Likewise.
	* rt/tst-aio3.c (do_test): Likewise.
	* rt/tst-aio4.c (do_test): Likewise.
	* rt/tst-aio5.c (do_test): Likewise.
	* rt/tst-aio6.c (do_test): Likewise.
	* rt/tst-aio7.c (do_test): Likewise.
	* sysdeps/generic/bits/libc-lock.h (__libc_setspecific): Use a cast to
	void so as to avoid compiler warnings.
	* libio/oldstdfiles.c [! _IO_MTSAFE_IO] (DEF_STDFILE): Don't define
	_IO_wide_data_FD, which is never used here.
	* libio/iofread.c
	[! _IO_MTSAFE_IO] (fread_unlocked): Add libc_hidden_ver defn.
	* libio/iofputs.c [! _IO_MTSAFE_IO] (fputs_unlocked): Likewise.
	* libio/iofgets.c [! _IO_MTSAFE_IO] (fgets_unlocked): Likewise.
	* include/resolv.h [! _LIBC_REENTRANT] (_res): #undef it before decl.
	* include/netdb.h [! _LIBC_REENTRANT] (h_errno): Declare normal extern.
	* misc/syslog.c (openlog): Conditionalize locking on [_LIBC_REENTRANT].
	(closelog): Likewise.
2002-07-06  Bruno Haible  <bruno@clisp.org>
	* sysdeps/alpha/fpu/fpu_control.h: Comment fix.
	* sysdeps/unix/sysv/linux/alpha/pipe.S: Moved to ...
	* sysdeps/unix/alpha/pipe.S: ... here.
	* sysdeps/unix/bsd/osf/alpha/pipe.S: File removed.
	* sysdeps/unix/i386/brk.S: Rename local label to '.Lhere' in ELF.
	* sysdeps/unix/i386/brk.S: Add PSEUDO_END invocation.
	* sysdeps/unix/i386/fork.S: Likewise.
	* sysdeps/unix/i386/pipe.S: Likewise.
	* sysdeps/unix/i386/wait.S: Likewise.
	* sysdeps/unix/fork.S: Fix PSEUDO_END argument.
	* sysdeps/unix/arm/fork.S: Likewise.
	* sysdeps/unix/sysv/linux/arm/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/hppa/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/i386/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/sh/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/i386/sysdep.h (PSEUDO): Fix syntax error.
	(L): Define right for ELF.
	* sysdeps/unix/sysv/linux/i386/sysdep.h (L): Remove definition.
	Now defined in sysdeps/i386/sysdep.h.
	* sysdeps/posix/readv.c: Ansify function definition.
	* sysdeps/posix/writev.c: Likewise.
	* stdio-common/tst-fseek.c (main): Don't assume that off_t and size_t
	have the same size. Avoid direct cast from size_t to off_t.
	* login/tst-utmp.c (simulate_login): Don't leave garbage after the
	nul byte in entry[n].ut_user.
	(simulate_logout): Likewise.
	* login/programs/utmpdump.c (print_entry): Test _HAVE_UT_TYPE,
	_HAVE_UT_PID, _HAVE_UT_ID, _HAVE_UT_HOST, instead of assuming the
	existence of corresponding members of 'struct utmp'.
	* login/tst-utmp.c: Trivialize the test if testing 'struct utmp' and
	!_HAVE_UT_TYPE.
	* sysdeps/unix/opendir.c (__opendir): If st_blksize is 0 or too small,
	allocate a buffer of at least BUFSIZ bytes, not just of
	sizeof (struct dirent).
	* sysdeps/generic/glob.c: Include <limits.h>.
	(NAME_MAX): Define a fallback.
	(glob_in_dir): Allocate enough room for a 'struct dirent64' on the
	stack.
	* posix/tst-dir.c: Include <stddef.h>, for offsetof.
	(main): Allocate enough room for a 'struct dirent64' on the stack.
	* posix/tst-gnuglob.c (my_DIR): Allocate enough room for a
	'struct dirent'.
	* sysdeps/unix/sysv/linux/init-first.c: Don't include
	kernel-features.h.
	* inet/htontest.c: Include <sys/types.h>.
	* sysdeps/generic/sys/sysinfo.h: Surround with __{BEGIN,END}_DECLS.
	* include/sys/sysctl.h: Comment fix.
	* elf/rtld.c (_rtld_global) [! _LIBC_REENTRANT]: Don't initialize
	_dl_load_lock.
	* libio/fileno.c (fileno_unlocked): Define regardless of _IO_MTSAFE_IO.
	* sysdeps/unix/bsd/bsd4.4/syscalls.list (__sigaltstack): New alias.
	* sysdeps/unix/inet/syscalls.list (__connect_internal): New alias.
	(__getpeername): New alias.
	(__getsockname): New alias.
	(__socket): New alias.
	* sysdeps/unix/common/syscalls.list (getpgid): Remove.
	* sysdeps/unix/syscalls.list (__chown_internal): New alias.
	(__fcntl_internal): New alias.
	(__profil): New alias.
											
										 
											2002-08-26 11:39:12 +00:00
										 |  |  |    Copyright (C) 1998,2000,02 Free Software Foundation, Inc. | 
					
						
							| 
									
										
										
										
											2001-07-06 04:58:11 +00:00
										 |  |  |    This file is part of the GNU C Library. | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The GNU C Library is free software; you can redistribute it and/or | 
					
						
							| 
									
										
										
										
											2001-07-06 04:58:11 +00:00
										 |  |  |    modify it under the terms of the GNU Lesser General Public | 
					
						
							|  |  |  |    License as published by the Free Software Foundation; either | 
					
						
							|  |  |  |    version 2.1 of the License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    The GNU C Library is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
					
						
							| 
									
										
										
										
											2001-07-06 04:58:11 +00:00
										 |  |  |    Lesser General Public License for more details. | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-06 04:58:11 +00:00
										 |  |  |    You should have received a copy of the GNU Lesser General Public | 
					
						
							|  |  |  |    License along with the GNU C Library; if not, write to the Free | 
					
						
							|  |  |  |    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | 
					
						
							|  |  |  |    02111-1307 USA.  */ | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <aio.h>
 | 
					
						
							|  |  |  | #include <errno.h>
 | 
					
						
							|  |  |  | #include <error.h>
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | #include <unistd.h>
 | 
					
						
							|  |  |  | #include <sys/stat.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-14 16:51:08 +00:00
										 |  |  | /* Prototype for our test function.  */ | 
					
						
							|  |  |  | extern void do_prepare (int argc, char *argv[]); | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | extern int do_test (int argc, char *argv[]); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-14 16:51:08 +00:00
										 |  |  | /* We have a preparation function.  */ | 
					
						
							|  |  |  | #define PREPARE do_prepare
 | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* We might need a bit longer timeout.  */ | 
					
						
							|  |  |  | #define TIMEOUT 20 /* sec */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* This defines the `main' function and some more.  */ | 
					
						
							|  |  |  | #include <test-skeleton.c>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-14 16:51:08 +00:00
										 |  |  | /* These are for the temporary file we generate.  */ | 
					
						
							|  |  |  | char *name; | 
					
						
							|  |  |  | int fd; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							|  |  |  | do_prepare (int argc, char *argv[]) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2006-09-12 11:44:01 +00:00
										 |  |  |   size_t name_len; | 
					
						
							| 
									
										
										
										
											1998-04-14 16:51:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   name_len = strlen (test_dir); | 
					
						
							|  |  |  |   name = malloc (name_len + sizeof ("/aioXXXXXX")); | 
					
						
							|  |  |  |   mempcpy (mempcpy (name, test_dir, name_len), | 
					
						
							|  |  |  | 	   "/aioXXXXXX", sizeof ("/aioXXXXXX")); | 
					
						
							|  |  |  |   add_temp_file (name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Open our test file.   */ | 
					
						
							|  |  |  |   fd = mkstemp (name); | 
					
						
							|  |  |  |   if (fd == -1) | 
					
						
							|  |  |  |     error (EXIT_FAILURE, errno, "cannot open test file `%s'", name); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-11-27 14:36:57 +00:00
										 |  |  | static int | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | test_file (const void *buf, size_t size, int fd, const char *msg) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   struct stat st; | 
					
						
							|  |  |  |   char tmp[size]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   errno = 0; | 
					
						
							|  |  |  |   if (fstat (fd, &st) < 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       error (0, errno, "%s: failed stat", msg); | 
					
						
							|  |  |  |       return 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-24 04:24:25 +00:00
										 |  |  |   if (st.st_size != (off_t) size) | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |     { | 
					
						
							|  |  |  |       error (0, errno, "%s: wrong size: %lu, should be %lu", | 
					
						
							|  |  |  | 	     msg, (unsigned long int) st.st_size, (unsigned long int) size); | 
					
						
							|  |  |  |       return 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-24 04:24:25 +00:00
										 |  |  |   if (pread (fd, tmp, size, 0) != (ssize_t) size) | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2000-07-26 13:49:15 +00:00
										 |  |  |       error (0, errno, "%s: failed pread", msg); | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |       return 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (memcmp (buf, tmp, size) != 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       error (0, errno, "%s: failed comparison", msg); | 
					
						
							|  |  |  |       return 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 20:19:13 +00:00
										 |  |  |   printf ("%s test ok\n", msg); | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-11-27 14:36:57 +00:00
										 |  |  | static int | 
					
						
							| 
									
										
										
										
											2000-07-27 09:43:12 +00:00
										 |  |  | do_wait (struct aiocb **cbp, size_t nent, int allowed_err) | 
					
						
							| 
									
										
										
										
											1998-04-11 20:19:13 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   int go_on; | 
					
						
							| 
									
										
										
										
											2000-07-27 09:43:12 +00:00
										 |  |  |   size_t cnt; | 
					
						
							|  |  |  |   int result = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 20:19:13 +00:00
										 |  |  |   do | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       aio_suspend ((const struct aiocb *const *) cbp, nent, NULL); | 
					
						
							|  |  |  |       go_on = 0; | 
					
						
							|  |  |  |       for (cnt = 0; cnt < nent; ++cnt) | 
					
						
							| 
									
										
										
										
											2000-07-27 09:43:12 +00:00
										 |  |  | 	if (cbp[cnt] != NULL) | 
					
						
							|  |  |  | 	  { | 
					
						
							|  |  |  | 	    if (aio_error (cbp[cnt]) == EINPROGRESS) | 
					
						
							|  |  |  | 	      go_on = 1; | 
					
						
							|  |  |  | 	    else | 
					
						
							|  |  |  | 	      { | 
					
						
							|  |  |  | 		if (aio_return (cbp[cnt]) == -1 | 
					
						
							|  |  |  | 		    && (allowed_err == 0 | 
					
						
							|  |  |  | 			|| aio_error (cbp[cnt]) != allowed_err)) | 
					
						
							|  |  |  | 		  { | 
					
						
							|  |  |  | 		    error (0, aio_error (cbp[cnt]), "Operation failed\n"); | 
					
						
							|  |  |  | 		    result = 1; | 
					
						
							|  |  |  | 		  } | 
					
						
							|  |  |  | 		cbp[cnt] = NULL; | 
					
						
							|  |  |  | 	      } | 
					
						
							|  |  |  | 	  } | 
					
						
							| 
									
										
										
										
											1998-04-11 20:19:13 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |   while (go_on); | 
					
						
							| 
									
										
										
										
											2000-07-27 09:43:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return result; | 
					
						
							| 
									
										
										
										
											1998-04-11 20:19:13 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | int | 
					
						
							|  |  |  | do_test (int argc, char *argv[]) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   struct aiocb cbs[10]; | 
					
						
							| 
									
										
										
										
											2000-07-27 09:43:12 +00:00
										 |  |  |   struct aiocb cbs_fsync; | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |   struct aiocb *cbp[10]; | 
					
						
							| 
									
										
										
										
											2000-07-27 09:43:12 +00:00
										 |  |  |   struct aiocb *cbp_fsync[1]; | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |   char buf[1000]; | 
					
						
							|  |  |  |   size_t cnt; | 
					
						
							|  |  |  |   int result = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Preparation.  */ | 
					
						
							|  |  |  |   for (cnt = 0; cnt < 10; ++cnt) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       cbs[cnt].aio_fildes = fd; | 
					
						
							|  |  |  |       cbs[cnt].aio_reqprio = 0; | 
					
						
							|  |  |  |       cbs[cnt].aio_buf = memset (&buf[cnt * 100], '0' + cnt, 100); | 
					
						
							|  |  |  |       cbs[cnt].aio_nbytes = 100; | 
					
						
							|  |  |  |       cbs[cnt].aio_offset = cnt * 100; | 
					
						
							|  |  |  |       cbs[cnt].aio_sigevent.sigev_notify = SIGEV_NONE; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       cbp[cnt] = &cbs[cnt]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* First a simple test.  */ | 
					
						
							|  |  |  |   for (cnt = 10; cnt > 0; ) | 
					
						
							| 
									
										
											  
											
												* locale/programs/ld-ctype.c (ctype_read): When given a repertoire
	name of "", store a null pointer instead.
	* configure.in (elf): Set to yes for freebsd*, netbsd*.
	* configure: Regenerated.
	* locale/xlocale.c [! (USE_TLS && HAVE___THREAD)] (__libc_tsd_LOCALE):
	Initialize this instead of __libc_tsd_LOCALE_data.
	* sysdeps/unix/grantpt.c (pts_name): Convert ENOTTY return from
	ptsname_r to EINVAL.
	* sysdeps/generic/ptsname.c (__ptsname_r): Return ENOSYS instead of 0.
	* rt/Makefile: Revert last change, it was inappropriate to presume aio
	implementations depend on pthreads.
	* rt/tst-aio.c (do_test): Exit happy if first failure is ENOSYS.
	* rt/tst-aio64.c (do_test): Likewise.
	* rt/tst-aio2.c (do_test): Likewise.
	* rt/tst-aio3.c (do_test): Likewise.
	* rt/tst-aio4.c (do_test): Likewise.
	* rt/tst-aio5.c (do_test): Likewise.
	* rt/tst-aio6.c (do_test): Likewise.
	* rt/tst-aio7.c (do_test): Likewise.
	* sysdeps/generic/bits/libc-lock.h (__libc_setspecific): Use a cast to
	void so as to avoid compiler warnings.
	* libio/oldstdfiles.c [! _IO_MTSAFE_IO] (DEF_STDFILE): Don't define
	_IO_wide_data_FD, which is never used here.
	* libio/iofread.c
	[! _IO_MTSAFE_IO] (fread_unlocked): Add libc_hidden_ver defn.
	* libio/iofputs.c [! _IO_MTSAFE_IO] (fputs_unlocked): Likewise.
	* libio/iofgets.c [! _IO_MTSAFE_IO] (fgets_unlocked): Likewise.
	* include/resolv.h [! _LIBC_REENTRANT] (_res): #undef it before decl.
	* include/netdb.h [! _LIBC_REENTRANT] (h_errno): Declare normal extern.
	* misc/syslog.c (openlog): Conditionalize locking on [_LIBC_REENTRANT].
	(closelog): Likewise.
2002-07-06  Bruno Haible  <bruno@clisp.org>
	* sysdeps/alpha/fpu/fpu_control.h: Comment fix.
	* sysdeps/unix/sysv/linux/alpha/pipe.S: Moved to ...
	* sysdeps/unix/alpha/pipe.S: ... here.
	* sysdeps/unix/bsd/osf/alpha/pipe.S: File removed.
	* sysdeps/unix/i386/brk.S: Rename local label to '.Lhere' in ELF.
	* sysdeps/unix/i386/brk.S: Add PSEUDO_END invocation.
	* sysdeps/unix/i386/fork.S: Likewise.
	* sysdeps/unix/i386/pipe.S: Likewise.
	* sysdeps/unix/i386/wait.S: Likewise.
	* sysdeps/unix/fork.S: Fix PSEUDO_END argument.
	* sysdeps/unix/arm/fork.S: Likewise.
	* sysdeps/unix/sysv/linux/arm/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/hppa/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/i386/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/sh/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.h (PSEUDO): Swap DO_CALL
	arguments.
	(DO_CALL): Swap argument order.
	* sysdeps/i386/sysdep.h (PSEUDO): Fix syntax error.
	(L): Define right for ELF.
	* sysdeps/unix/sysv/linux/i386/sysdep.h (L): Remove definition.
	Now defined in sysdeps/i386/sysdep.h.
	* sysdeps/posix/readv.c: Ansify function definition.
	* sysdeps/posix/writev.c: Likewise.
	* stdio-common/tst-fseek.c (main): Don't assume that off_t and size_t
	have the same size. Avoid direct cast from size_t to off_t.
	* login/tst-utmp.c (simulate_login): Don't leave garbage after the
	nul byte in entry[n].ut_user.
	(simulate_logout): Likewise.
	* login/programs/utmpdump.c (print_entry): Test _HAVE_UT_TYPE,
	_HAVE_UT_PID, _HAVE_UT_ID, _HAVE_UT_HOST, instead of assuming the
	existence of corresponding members of 'struct utmp'.
	* login/tst-utmp.c: Trivialize the test if testing 'struct utmp' and
	!_HAVE_UT_TYPE.
	* sysdeps/unix/opendir.c (__opendir): If st_blksize is 0 or too small,
	allocate a buffer of at least BUFSIZ bytes, not just of
	sizeof (struct dirent).
	* sysdeps/generic/glob.c: Include <limits.h>.
	(NAME_MAX): Define a fallback.
	(glob_in_dir): Allocate enough room for a 'struct dirent64' on the
	stack.
	* posix/tst-dir.c: Include <stddef.h>, for offsetof.
	(main): Allocate enough room for a 'struct dirent64' on the stack.
	* posix/tst-gnuglob.c (my_DIR): Allocate enough room for a
	'struct dirent'.
	* sysdeps/unix/sysv/linux/init-first.c: Don't include
	kernel-features.h.
	* inet/htontest.c: Include <sys/types.h>.
	* sysdeps/generic/sys/sysinfo.h: Surround with __{BEGIN,END}_DECLS.
	* include/sys/sysctl.h: Comment fix.
	* elf/rtld.c (_rtld_global) [! _LIBC_REENTRANT]: Don't initialize
	_dl_load_lock.
	* libio/fileno.c (fileno_unlocked): Define regardless of _IO_MTSAFE_IO.
	* sysdeps/unix/bsd/bsd4.4/syscalls.list (__sigaltstack): New alias.
	* sysdeps/unix/inet/syscalls.list (__connect_internal): New alias.
	(__getpeername): New alias.
	(__getsockname): New alias.
	(__socket): New alias.
	* sysdeps/unix/common/syscalls.list (getpgid): Remove.
	* sysdeps/unix/syscalls.list (__chown_internal): New alias.
	(__fcntl_internal): New alias.
	(__profil): New alias.
											
										 
											2002-08-26 11:39:12 +00:00
										 |  |  |     if (aio_write (cbp[--cnt]) < 0 && errno == ENOSYS) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  | 	error (0, 0, "no aio support in this configuration"); | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |   /* Wait 'til the results are there.  */ | 
					
						
							| 
									
										
										
										
											2000-07-27 09:43:12 +00:00
										 |  |  |   result |= do_wait (cbp, 10, 0); | 
					
						
							| 
									
										
										
										
											1998-04-11 20:19:13 +00:00
										 |  |  |   /* Test this.  */ | 
					
						
							|  |  |  |   result |= test_file (buf, sizeof (buf), fd, "aio_write"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Read now as we've written it.  */ | 
					
						
							|  |  |  |   memset (buf, '\0', sizeof (buf)); | 
					
						
							|  |  |  |   /* Issue the commands.  */ | 
					
						
							|  |  |  |   for (cnt = 10; cnt > 0; ) | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											1998-04-11 20:19:13 +00:00
										 |  |  |       --cnt; | 
					
						
							|  |  |  |       cbp[cnt] = &cbs[cnt]; | 
					
						
							|  |  |  |       aio_read (cbp[cnt]); | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											1998-04-11 20:19:13 +00:00
										 |  |  |   /* Wait 'til the results are there.  */ | 
					
						
							| 
									
										
										
										
											2000-07-27 09:43:12 +00:00
										 |  |  |   result |= do_wait (cbp, 10, 0); | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |   /* Test this.  */ | 
					
						
							| 
									
										
										
										
											1998-04-11 20:19:13 +00:00
										 |  |  |   for (cnt = 0; cnt < 1000; ++cnt) | 
					
						
							|  |  |  |     if (buf[cnt] != '0' + (cnt / 100)) | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  | 	result = 1; | 
					
						
							|  |  |  | 	error (0, 0, "comparison failed for aio_read test"); | 
					
						
							|  |  |  | 	break; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (cnt == 1000) | 
					
						
							|  |  |  |     puts ("aio_read test ok"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Remove the test file contents.  */ | 
					
						
							|  |  |  |   if (ftruncate (fd, 0) < 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       error (0, errno, "ftruncate failed\n"); | 
					
						
							|  |  |  |       result = 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Test lio_listio.  */ | 
					
						
							|  |  |  |   for (cnt = 0; cnt < 10; ++cnt) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       cbs[cnt].aio_lio_opcode = LIO_WRITE; | 
					
						
							|  |  |  |       cbp[cnt] = &cbs[cnt]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   /* Issue the command.  */ | 
					
						
							|  |  |  |   lio_listio (LIO_WAIT, cbp, 10, NULL); | 
					
						
							|  |  |  |   /* ...and immediately test it since we started it in wait mode.  */ | 
					
						
							|  |  |  |   result |= test_file (buf, sizeof (buf), fd, "lio_listio (write)"); | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-07-27 09:43:12 +00:00
										 |  |  |   /* Test aio_fsync.  */ | 
					
						
							|  |  |  |   cbs_fsync.aio_fildes = fd; | 
					
						
							|  |  |  |   cbs_fsync.aio_sigevent.sigev_notify = SIGEV_NONE; | 
					
						
							|  |  |  |   cbp_fsync[0] = &cbs_fsync; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Remove the test file contents first.  */ | 
					
						
							|  |  |  |   if (ftruncate (fd, 0) < 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       error (0, errno, "ftruncate failed\n"); | 
					
						
							|  |  |  |       result = 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Write again.  */ | 
					
						
							|  |  |  |   for (cnt = 10; cnt > 0; ) | 
					
						
							|  |  |  |     aio_write (cbp[--cnt]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (aio_fsync (O_SYNC, &cbs_fsync) < 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       error (0, errno, "aio_fsync failed\n"); | 
					
						
							|  |  |  |       result = 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   result |= do_wait (cbp_fsync, 1, 0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* ...and test since all data should be on disk now.  */ | 
					
						
							|  |  |  |   result |= test_file (buf, sizeof (buf), fd, "aio_fsync (aio_write)"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Test aio_cancel.  */ | 
					
						
							|  |  |  |   /* Remove the test file contents first.  */ | 
					
						
							|  |  |  |   if (ftruncate (fd, 0) < 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       error (0, errno, "ftruncate failed\n"); | 
					
						
							|  |  |  |       result = 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Write again.  */ | 
					
						
							|  |  |  |   for (cnt = 10; cnt > 0; ) | 
					
						
							|  |  |  |     aio_write (cbp[--cnt]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Cancel all requests.  */ | 
					
						
							|  |  |  |   if (aio_cancel (fd, NULL) == -1) | 
					
						
							|  |  |  |     printf ("aio_cancel (fd, NULL) cannot cancel anything\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   result |= do_wait (cbp, 10, ECANCELED); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Another test for aio_cancel.  */ | 
					
						
							|  |  |  |   /* Remove the test file contents first.  */ | 
					
						
							|  |  |  |   if (ftruncate (fd, 0) < 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       error (0, errno, "ftruncate failed\n"); | 
					
						
							|  |  |  |       result = 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Write again.  */ | 
					
						
							|  |  |  |   for (cnt = 10; cnt > 0; ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       --cnt; | 
					
						
							|  |  |  |       cbp[cnt] = &cbs[cnt]; | 
					
						
							|  |  |  |       aio_write (cbp[cnt]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   puts ("finished3"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Cancel all requests.  */ | 
					
						
							|  |  |  |   for (cnt = 10; cnt > 0; ) | 
					
						
							|  |  |  |     if (aio_cancel (fd, cbp[--cnt]) == -1) | 
					
						
							|  |  |  |       /* This is not an error.  The request can simply be finished.  */ | 
					
						
							|  |  |  |       printf ("aio_cancel (fd, cbp[%Zd]) cannot be canceled\n", cnt); | 
					
						
							|  |  |  |   puts ("finished2"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   result |= do_wait (cbp, 10, ECANCELED); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   puts ("finished"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-11 09:51:01 +00:00
										 |  |  |   return result; | 
					
						
							|  |  |  | } |