From 73299943388c0eebf6a9c8d6288e9da8289f9dca Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 15 Jul 2003 07:52:52 +0000 Subject: Update. More cancellation handling fixups. * sysdeps/unix/sysv/linux/not-cancel.h: Add waitpid_not_cancel. * sysdeps/generic/not-cancel.h: Likewise. * catgets/open_catalog.c: Use not-cancelable syscalls. * time/Makefile (CFLAGS-getdate.c): Add -fexceptions. * sysdeps/unix/sysv/linux/llseek.c: Must not be cancelable. * sysdeps/unix/syscalls.list: Don't mark lseek as cancelable. * dlfcn/dlfcn.h: Mark dlopen with __THROW again. * io/fcntl.h: Don't mark posix_fallocate with __THROW. * libio/fileops.c: Use not-cancelable syscalls for fclose. * libio/iopopen.c: Use no-cancelable syscalls. * libio/stdio.h: Mark popen and pclose with __THROW again. * misc/Makefile (CFLAGS-syslog.c): Add -fexceptions. * misc/syslog.c: Fix locking and cancellation cleanup handling. * posix/unistd.h: Mark ttyname and ttyname_r again with __THROW. * stdio-common/Makefile (CFLAGS-tmpfile.c, CFLAGS-tmpfile64.c, CFLAGS-tempname.c): Add -fexceptions. * stdlib/Makefile (CFLAGS-mkstemp.c): Add -fexceptions. * string/string.h: Mark strerror and strerror_r with _THROW again. * sysdeps/generic/unwind.inc: New file. Copied from gcc. * sysdeps/generic/unwind-dw2.c: Update from gcc version. Remove #ifs since we now need all the code compiled. * sysdeps/posix/spawni.c: Use close_not_cancel instead of close. * sysdeps/unix/closedir.c: Use not-cancelable syscalls. * sysdeps/unix/opendir.c: Likewise. --- libio/fileops.c | 9 +++++++-- libio/iopopen.c | 5 +++-- libio/stdio.h | 14 ++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) (limited to 'libio') diff --git a/libio/fileops.c b/libio/fileops.c index aae02f001c..0faf01f09f 100644 --- a/libio/fileops.c +++ b/libio/fileops.c @@ -47,6 +47,7 @@ # include "../iconv/gconv_charset.h" # include "../iconv/gconv_int.h" # include +# include #endif #ifndef errno extern int errno; @@ -1240,14 +1241,18 @@ _IO_file_close_mmap (fp) /* In addition to closing the file descriptor we have to unmap the file. */ (void) __munmap (fp->_IO_buf_base, fp->_IO_buf_end - fp->_IO_buf_base); fp->_IO_buf_base = fp->_IO_buf_end = NULL; - return close (fp->_fileno); + /* Cancelling close should be avoided if possible since it leaves an + unrecoverable state behind. */ + return close_not_cancel (fp->_fileno); } int _IO_file_close (fp) _IO_FILE *fp; { - return close (fp->_fileno); + /* Cancelling close should be avoided if possible since it leaves an + unrecoverable state behind. */ + return close_not_cancel (fp->_fileno); } INTDEF(_IO_file_close) diff --git a/libio/iopopen.c b/libio/iopopen.c index 80a97f1b64..63094389d7 100644 --- a/libio/iopopen.c +++ b/libio/iopopen.c @@ -39,6 +39,7 @@ #ifdef _LIBC # include # include +# include #endif #include #include @@ -74,7 +75,7 @@ extern int _IO_dup2 __P ((int fd, int fd2)); #ifndef _IO_waitpid #ifdef _LIBC -#define _IO_waitpid __waitpid +#define _IO_waitpid waitpid_not_cancel #else #define _IO_waitpid waitpid #endif @@ -89,7 +90,7 @@ extern int _IO_dup2 __P ((int fd, int fd2)); #ifndef _IO_close #ifdef _LIBC -#define _IO_close __close +#define _IO_close close_not_cancel #else #define _IO_close close #endif diff --git a/libio/stdio.h b/libio/stdio.h index f98d38ff32..88ef61b029 100644 --- a/libio/stdio.h +++ b/libio/stdio.h @@ -757,17 +757,11 @@ extern int fileno_unlocked (FILE *__stream) __THROW; #if (defined __USE_POSIX2 || defined __USE_SVID || defined __USE_BSD || \ defined __USE_MISC) -/* Create a new stream connected to a pipe running the given command. +/* Create a new stream connected to a pipe running the given command. */ +extern FILE *popen (__const char *__command, __const char *__modes) __THROW; - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern FILE *popen (__const char *__command, __const char *__modes); - -/* Close a stream opened by popen and return the status of its child. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern int pclose (FILE *__stream); +/* Close a stream opened by popen and return the status of its child. */ +extern int pclose (FILE *__stream) __THROW; #endif -- cgit 1.4.1