mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
(CFLAGS-oldtmpfile.c): Add -fexceptions.
This commit is contained in:
@ -67,6 +67,10 @@ CFLAGS-fts.c = -Wno-uninitialized
|
|||||||
CFLAGS-fcntl.c = -fexceptions -fasynchronous-unwind-tables
|
CFLAGS-fcntl.c = -fexceptions -fasynchronous-unwind-tables
|
||||||
CFLAGS-poll.c = -fexceptions -fasynchronous-unwind-tables
|
CFLAGS-poll.c = -fexceptions -fasynchronous-unwind-tables
|
||||||
CFLAGS-lockf.c = -fexceptions
|
CFLAGS-lockf.c = -fexceptions
|
||||||
|
CFLAGS-statfs.c = -fexceptions
|
||||||
|
CFLAGS-fstatfs.c = -fexceptions
|
||||||
|
CFLAGS-statvfs.c = -fexceptions
|
||||||
|
CFLAGS-fstatvfs.c = -fexceptions
|
||||||
|
|
||||||
CFLAGS-test-stat.c = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
|
CFLAGS-test-stat.c = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
|
||||||
CFLAGS-test-lfs.c = -D_LARGEFILE64_SOURCE
|
CFLAGS-test-lfs.c = -D_LARGEFILE64_SOURCE
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 1995,96,97,98,99,2000,01,02 Free Software Foundation, Inc.
|
# Copyright (C) 1995-2002, 2003 Free Software Foundation, Inc.
|
||||||
# This file is part of the GNU C Library.
|
# This file is part of the GNU C Library.
|
||||||
|
|
||||||
# The GNU C Library is free software; you can redistribute it and/or
|
# The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -129,6 +129,10 @@ CFLAGS-putwchar.c = $(exceptions)
|
|||||||
CFLAGS-rewind.c = $(exceptions)
|
CFLAGS-rewind.c = $(exceptions)
|
||||||
CFLAGS-wfileops.c = $(exceptions)
|
CFLAGS-wfileops.c = $(exceptions)
|
||||||
CFLAGS-wgenops.c = $(exceptions)
|
CFLAGS-wgenops.c = $(exceptions)
|
||||||
|
CFLAGS-oldiofopen.c = $(exceptions)
|
||||||
|
CFLAGS-iofopen.c = $(exceptions)
|
||||||
|
CFLAGS-iofopen64.c = $(exceptions)
|
||||||
|
CFLAGS-oldtmpfile.c = $(exceptions)
|
||||||
# XXX Do we need filedoalloc and wfiledoalloc? Others?
|
# XXX Do we need filedoalloc and wfiledoalloc? Others?
|
||||||
|
|
||||||
CFLAGS-tst_putwc.c = -DOBJPFX=\"$(objpfx)\"
|
CFLAGS-tst_putwc.c = -DOBJPFX=\"$(objpfx)\"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991, 1993, 1996-1999, 2000 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 1993, 1996-2000, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -43,7 +43,7 @@ __old_tmpfile (void)
|
|||||||
|
|
||||||
/* Note that this relies on the Unix semantics that
|
/* Note that this relies on the Unix semantics that
|
||||||
a file is not really removed until it is closed. */
|
a file is not really removed until it is closed. */
|
||||||
(void) remove (buf);
|
(void) __unlink (buf);
|
||||||
|
|
||||||
if ((f = _IO_old_fdopen (fd, "w+b")) == NULL)
|
if ((f = _IO_old_fdopen (fd, "w+b")) == NULL)
|
||||||
__close (fd);
|
__close (fd);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 1996,1997,1998,2000,2001,2002 Free Software Foundation, Inc.
|
# Copyright (C) 1996-1998,2000-2002,2003 Free Software Foundation, Inc.
|
||||||
# This file is part of the GNU C Library.
|
# This file is part of the GNU C Library.
|
||||||
|
|
||||||
# The GNU C Library is free software; you can redistribute it and/or
|
# The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -47,6 +47,8 @@ libutil-routines:= login login_tty logout logwtmp openpty forkpty
|
|||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
|
||||||
|
CFLAGS-getpt.c = -fexceptions
|
||||||
|
|
||||||
ifeq (yes,$(build-static-nss))
|
ifeq (yes,$(build-static-nss))
|
||||||
otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
|
otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
|
||||||
$(resolvobjdir)/libresolv.a $(common-objpfx)libc.a
|
$(resolvobjdir)/libresolv.a $(common-objpfx)libc.a
|
||||||
|
@ -84,6 +84,13 @@ CFLAGS-usleep.c = -fexceptions
|
|||||||
CFLAGS-syslog.c = -fexceptions
|
CFLAGS-syslog.c = -fexceptions
|
||||||
CFLAGS-error.c = -fexceptions
|
CFLAGS-error.c = -fexceptions
|
||||||
CFLAGS-getpass.c = -fexceptions
|
CFLAGS-getpass.c = -fexceptions
|
||||||
|
CFLAGS-mkstemp.c = -fexceptions
|
||||||
|
CFLAGS-mkstemp64.c = -fexceptions
|
||||||
|
CFLAGS-mntent_r.c = -fexceptions
|
||||||
|
CFLAGS-mntent.c = -fexceptions
|
||||||
|
CFLAGS-fstab.c = -fexceptions
|
||||||
|
CFLAGS-getsysstats.c = -fexceptions
|
||||||
|
CFLAGS-getusershell.c = -fexceptions
|
||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
|
||||||
|
10
misc/fstab.h
10
misc/fstab.h
@ -68,11 +68,11 @@ struct fstab
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
extern struct fstab *getfsent (void) __THROW;
|
extern struct fstab *getfsent (void);
|
||||||
extern struct fstab *getfsspec (__const char *__name) __THROW;
|
extern struct fstab *getfsspec (__const char *__name);
|
||||||
extern struct fstab *getfsfile (__const char *__name) __THROW;
|
extern struct fstab *getfsfile (__const char *__name);
|
||||||
extern int setfsent (void) __THROW;
|
extern int setfsent (void);
|
||||||
extern void endfsent (void) __THROW;
|
extern void endfsent (void);
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Utilities for reading/writing fstab, mtab, etc.
|
/* Utilities for reading/writing fstab, mtab, etc.
|
||||||
Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -64,28 +64,28 @@ struct mntent
|
|||||||
|
|
||||||
/* Prepare to begin reading and/or writing mount table entries from the
|
/* Prepare to begin reading and/or writing mount table entries from the
|
||||||
beginning of FILE. MODE is as for `fopen'. */
|
beginning of FILE. MODE is as for `fopen'. */
|
||||||
extern FILE *setmntent (__const char *__file, __const char *__mode) __THROW;
|
extern FILE *setmntent (__const char *__file, __const char *__mode);
|
||||||
|
|
||||||
/* Read one mount table entry from STREAM. Returns a pointer to storage
|
/* Read one mount table entry from STREAM. Returns a pointer to storage
|
||||||
reused on the next call, or null for EOF or error (use feof/ferror to
|
reused on the next call, or null for EOF or error (use feof/ferror to
|
||||||
check). */
|
check). */
|
||||||
extern struct mntent *getmntent (FILE *__stream) __THROW;
|
extern struct mntent *getmntent (FILE *__stream);
|
||||||
|
|
||||||
#ifdef __USE_MISC
|
#ifdef __USE_MISC
|
||||||
/* Reentrant version of the above function. */
|
/* Reentrant version of the above function. */
|
||||||
extern struct mntent *getmntent_r (FILE *__restrict __stream,
|
extern struct mntent *getmntent_r (FILE *__restrict __stream,
|
||||||
struct mntent *__restrict __result,
|
struct mntent *__restrict __result,
|
||||||
char *__restrict __buffer,
|
char *__restrict __buffer,
|
||||||
int __bufsize) __THROW;
|
int __bufsize);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Write the mount table entry described by MNT to STREAM.
|
/* Write the mount table entry described by MNT to STREAM.
|
||||||
Return zero on success, nonzero on failure. */
|
Return zero on success, nonzero on failure. */
|
||||||
extern int addmntent (FILE *__restrict __stream,
|
extern int addmntent (FILE *__restrict __stream,
|
||||||
__const struct mntent *__restrict __mnt) __THROW;
|
__const struct mntent *__restrict __mnt);
|
||||||
|
|
||||||
/* Close a stream opened with `setmntent'. */
|
/* Close a stream opened with `setmntent'. */
|
||||||
extern int endmntent (FILE *__stream) __THROW;
|
extern int endmntent (FILE *__stream);
|
||||||
|
|
||||||
/* Search MNT->mnt_opts for an option matching OPT.
|
/* Search MNT->mnt_opts for an option matching OPT.
|
||||||
Returns the address of the substring, or null if none found. */
|
Returns the address of the substring, or null if none found. */
|
||||||
|
@ -128,6 +128,8 @@ CFLAGS-wait.c = -fexceptions -fasynchronous-unwind-tables
|
|||||||
CFLAGS-waitid.c = -fexceptions
|
CFLAGS-waitid.c = -fexceptions
|
||||||
CFLAGS-waitpid.c = -fexceptions -fasynchronous-unwind-tables
|
CFLAGS-waitpid.c = -fexceptions -fasynchronous-unwind-tables
|
||||||
CFLAGS-getopt.c = -fexceptions
|
CFLAGS-getopt.c = -fexceptions
|
||||||
|
CFLAGS-wordexp.c = -fexceptions
|
||||||
|
CFLAGS-sysconf.c = -fexceptions
|
||||||
|
|
||||||
tstgetopt-ARGS = -a -b -cfoobar --required foobar --optional=bazbug \
|
tstgetopt-ARGS = -a -b -cfoobar --required foobar --optional=bazbug \
|
||||||
--none random --col --color --colour
|
--none random --col --color --colour
|
||||||
|
@ -525,13 +525,13 @@ extern void _exit (int __status) __attribute__ ((__noreturn__));
|
|||||||
#include <bits/confname.h>
|
#include <bits/confname.h>
|
||||||
|
|
||||||
/* Get file-specific configuration information about PATH. */
|
/* Get file-specific configuration information about PATH. */
|
||||||
extern long int pathconf (__const char *__path, int __name) __THROW;
|
extern long int pathconf (__const char *__path, int __name);
|
||||||
|
|
||||||
/* Get file-specific configuration about descriptor FD. */
|
/* Get file-specific configuration about descriptor FD. */
|
||||||
extern long int fpathconf (int __fd, int __name) __THROW;
|
extern long int fpathconf (int __fd, int __name);
|
||||||
|
|
||||||
/* Get the value of the system variable NAME. */
|
/* Get the value of the system variable NAME. */
|
||||||
extern long int sysconf (int __name) __THROW __attribute__ ((__const__));
|
extern long int sysconf (int __name) __attribute__ ((__const__));
|
||||||
|
|
||||||
#ifdef __USE_POSIX2
|
#ifdef __USE_POSIX2
|
||||||
/* Get the value of the string-valued system variable NAME. */
|
/* Get the value of the string-valued system variable NAME. */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991, 92, 96, 97, 98, 99, 2001 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 92, 1996-1999, 2001, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -61,7 +61,7 @@ enum
|
|||||||
|
|
||||||
/* Do word expansion of WORDS into PWORDEXP. */
|
/* Do word expansion of WORDS into PWORDEXP. */
|
||||||
extern int wordexp (__const char *__restrict __words,
|
extern int wordexp (__const char *__restrict __words,
|
||||||
wordexp_t *__restrict __pwordexp, int __flags) __THROW;
|
wordexp_t *__restrict __pwordexp, int __flags);
|
||||||
|
|
||||||
/* Free the storage allocated by a `wordexp' call. */
|
/* Free the storage allocated by a `wordexp' call. */
|
||||||
extern void wordfree (wordexp_t *__wordexp) __THROW;
|
extern void wordfree (wordexp_t *__wordexp) __THROW;
|
||||||
|
@ -84,6 +84,7 @@ CFLAGS-msort.c = $(exceptions)
|
|||||||
CFLAGS-qsort.c = $(exceptions)
|
CFLAGS-qsort.c = $(exceptions)
|
||||||
CFLAGS-system.c = -fexceptions
|
CFLAGS-system.c = -fexceptions
|
||||||
CFLAGS-mkstemp.c = -fexceptions
|
CFLAGS-mkstemp.c = -fexceptions
|
||||||
|
CFLAGS-fmtmsg.c = -fexceptions
|
||||||
|
|
||||||
include ../Makeconfig
|
include ../Makeconfig
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
/* Copyright (C) 1997,1999,2000,2001,2002,2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ fmtmsg (long int classification, const char *label, int severity,
|
|||||||
int result = MM_OK;
|
int result = MM_OK;
|
||||||
struct severity_info *severity_rec;
|
struct severity_info *severity_rec;
|
||||||
|
|
||||||
/* make sure everything is initialized. */
|
/* Make sure everything is initialized. */
|
||||||
__libc_once (once, init);
|
__libc_once (once, init);
|
||||||
|
|
||||||
/* Start the real work. First check whether the input is ok. */
|
/* Start the real work. First check whether the input is ok. */
|
||||||
@ -137,6 +137,14 @@ fmtmsg (long int classification, const char *label, int severity,
|
|||||||
return MM_NOTOK;
|
return MM_NOTOK;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __libc_ptf_call
|
||||||
|
/* We do not want this call to be cut short by a thread
|
||||||
|
cancellation. Therefore disable cancellation for now. */
|
||||||
|
int state = PTHREAD_CANCEL_ENABLE;
|
||||||
|
__libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
|
||||||
|
0);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Now we can print. */
|
/* Now we can print. */
|
||||||
if (classification & MM_PRINT)
|
if (classification & MM_PRINT)
|
||||||
{
|
{
|
||||||
@ -206,6 +214,10 @@ fmtmsg (long int classification, const char *label, int severity,
|
|||||||
do_tag ? tag : "");
|
do_tag ? tag : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __libc_ptf_call
|
||||||
|
__libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Message display handling.
|
/* Message display handling.
|
||||||
Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
|
Copyright (C) 1997, 1999, 2000, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -94,7 +94,7 @@ enum
|
|||||||
and TAG to console or standard error. */
|
and TAG to console or standard error. */
|
||||||
extern int fmtmsg (long int __classification, __const char *__label,
|
extern int fmtmsg (long int __classification, __const char *__label,
|
||||||
int __severity, __const char *__text,
|
int __severity, __const char *__text,
|
||||||
__const char *__action, __const char *__tag) __THROW;
|
__const char *__action, __const char *__tag);
|
||||||
|
|
||||||
#ifdef __USE_SVID
|
#ifdef __USE_SVID
|
||||||
/* Add or remove severity level. */
|
/* Add or remove severity level. */
|
||||||
|
@ -879,7 +879,7 @@ extern void setkey (__const char *__key) __THROW;
|
|||||||
|
|
||||||
#ifdef __USE_XOPEN2K
|
#ifdef __USE_XOPEN2K
|
||||||
/* Return a master pseudo-terminal handle. */
|
/* Return a master pseudo-terminal handle. */
|
||||||
extern int posix_openpt (int __oflag) __THROW;
|
extern int posix_openpt (int __oflag);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __USE_XOPEN
|
#ifdef __USE_XOPEN
|
||||||
@ -906,7 +906,7 @@ extern char *ptsname (int __fd) __THROW;
|
|||||||
extern int ptsname_r (int __fd, char *__buf, size_t __buflen) __THROW;
|
extern int ptsname_r (int __fd, char *__buf, size_t __buflen) __THROW;
|
||||||
|
|
||||||
/* Open a master pseudo terminal and return its file descriptor. */
|
/* Open a master pseudo terminal and return its file descriptor. */
|
||||||
extern int getpt (void) __THROW;
|
extern int getpt (void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __USE_BSD
|
#ifdef __USE_BSD
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Open a stdio stream on an anonymous temporary file. Generic/POSIX version.
|
/* Open a stdio stream on an anonymous temporary file. Generic/POSIX version.
|
||||||
Copyright (C) 1991,93,96,97,98,99,2000,2002 Free Software Foundation, Inc.
|
Copyright (C) 1991,93,1996-2000,2002,2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -51,7 +51,7 @@ tmpfile (void)
|
|||||||
|
|
||||||
/* Note that this relies on the Unix semantics that
|
/* Note that this relies on the Unix semantics that
|
||||||
a file is not really removed until it is closed. */
|
a file is not really removed until it is closed. */
|
||||||
(void) remove (buf);
|
(void) __unlink (buf);
|
||||||
|
|
||||||
if ((f = __fdopen (fd, "w+b")) == NULL)
|
if ((f = __fdopen (fd, "w+b")) == NULL)
|
||||||
__close (fd);
|
__close (fd);
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
02111-1307 USA. */
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
#include <alloca.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -42,6 +43,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <wordexp.h>
|
#include <wordexp.h>
|
||||||
|
|
||||||
|
#include <bits/libc-lock.h>
|
||||||
#include <stdio-common/_itoa.h>
|
#include <stdio-common/_itoa.h>
|
||||||
|
|
||||||
/* Undefine the following line for the production version. */
|
/* Undefine the following line for the production version. */
|
||||||
@ -327,10 +329,7 @@ parse_tilde (char **word, size_t *word_length, size_t *max_length,
|
|||||||
|
|
||||||
while ((result = __getpwuid_r (uid, &pwd, buffer, buflen, &tpwd)) != 0
|
while ((result = __getpwuid_r (uid, &pwd, buffer, buflen, &tpwd)) != 0
|
||||||
&& errno == ERANGE)
|
&& errno == ERANGE)
|
||||||
{
|
extend_alloca (buffer, buflen, buflen + 1000);
|
||||||
buflen += 1000;
|
|
||||||
buffer = __alloca (buflen);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == 0 && tpwd != NULL && pwd.pw_dir != NULL)
|
if (result == 0 && tpwd != NULL && pwd.pw_dir != NULL)
|
||||||
{
|
{
|
||||||
@ -357,10 +356,7 @@ parse_tilde (char **word, size_t *word_length, size_t *max_length,
|
|||||||
|
|
||||||
while ((result = __getpwnam_r (user, &pwd, buffer, buflen, &tpwd)) != 0
|
while ((result = __getpwnam_r (user, &pwd, buffer, buflen, &tpwd)) != 0
|
||||||
&& errno == ERANGE)
|
&& errno == ERANGE)
|
||||||
{
|
extend_alloca (buffer, buflen, buflen + 1000);
|
||||||
buflen += 1000;
|
|
||||||
buffer = __alloca (buflen);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == 0 && tpwd != NULL && pwd.pw_dir)
|
if (result == 0 && tpwd != NULL && pwd.pw_dir)
|
||||||
*word = w_addstr (*word, word_length, max_length, pwd.pw_dir);
|
*word = w_addstr (*word, word_length, max_length, pwd.pw_dir);
|
||||||
@ -840,7 +836,7 @@ exec_comm_child (char *comm, int *fildes, int showerr, int noexec)
|
|||||||
args[1] = "-nc";
|
args[1] = "-nc";
|
||||||
|
|
||||||
/* Redirect output. */
|
/* Redirect output. */
|
||||||
__dup2 (fildes[1], 1);
|
__dup2 (fildes[1], STDOUT_FILENO);
|
||||||
__close (fildes[1]);
|
__close (fildes[1]);
|
||||||
|
|
||||||
/* Redirect stderr to /dev/null if we have to. */
|
/* Redirect stderr to /dev/null if we have to. */
|
||||||
@ -852,12 +848,12 @@ exec_comm_child (char *comm, int *fildes, int showerr, int noexec)
|
|||||||
fd = __open (_PATH_DEVNULL, O_WRONLY);
|
fd = __open (_PATH_DEVNULL, O_WRONLY);
|
||||||
if (fd >= 0 && fd != 2)
|
if (fd >= 0 && fd != 2)
|
||||||
{
|
{
|
||||||
__dup2 (fd, 2);
|
__dup2 (fd, STDERR_FILENO);
|
||||||
__close (fd);
|
__close (fd);
|
||||||
}
|
}
|
||||||
/* Be paranoid. Check that we actually opened the /dev/null
|
/* Be paranoid. Check that we actually opened the /dev/null
|
||||||
device. */
|
device. */
|
||||||
if (__builtin_expect (__fxstat64 (_STAT_VER, 2, &st), 0) != 0
|
if (__builtin_expect (__fxstat64 (_STAT_VER, STDERR_FILENO, &st), 0) != 0
|
||||||
|| __builtin_expect (S_ISCHR (st.st_mode), 1) == 0
|
|| __builtin_expect (S_ISCHR (st.st_mode), 1) == 0
|
||||||
#if defined DEV_NULL_MAJOR && defined DEV_NULL_MINOR
|
#if defined DEV_NULL_MAJOR && defined DEV_NULL_MINOR
|
||||||
|| st.st_rdev != makedev (DEV_NULL_MAJOR, DEV_NULL_MINOR)
|
|| st.st_rdev != makedev (DEV_NULL_MAJOR, DEV_NULL_MINOR)
|
||||||
@ -913,7 +909,7 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pid == 0)
|
if (pid == 0)
|
||||||
exec_comm_child(comm, fildes, (flags & WRDE_SHOWERR), 0);
|
exec_comm_child (comm, fildes, flags & WRDE_SHOWERR, 0);
|
||||||
|
|
||||||
/* Parent */
|
/* Parent */
|
||||||
|
|
||||||
@ -1086,7 +1082,7 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
|
|||||||
if (pid == 0)
|
if (pid == 0)
|
||||||
{
|
{
|
||||||
fildes[0] = fildes[1] = -1;
|
fildes[0] = fildes[1] = -1;
|
||||||
exec_comm_child(comm, fildes, 0, 1);
|
exec_comm_child (comm, fildes, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (__waitpid (pid, &status, 0) == pid && status != 0)
|
if (__waitpid (pid, &status, 0) == pid && status != 0)
|
||||||
@ -1142,8 +1138,25 @@ parse_comm (char **word, size_t *word_length, size_t *max_length,
|
|||||||
/* Go -- give script to the shell */
|
/* Go -- give script to the shell */
|
||||||
if (comm)
|
if (comm)
|
||||||
{
|
{
|
||||||
|
#ifdef __libc_ptf_call
|
||||||
|
/* We do not want the exec_comm call to be cut short
|
||||||
|
by a thread cancellation since cleanup is very
|
||||||
|
ugly. Therefore disable cancellation for
|
||||||
|
now. */
|
||||||
|
// XXX Ideally we do want the thread being cancelable.
|
||||||
|
// XXX If demand is there we'll change it.
|
||||||
|
int state = PTHREAD_CANCEL_ENABLE;
|
||||||
|
__libc_ptf_call (pthread_setcancelstate,
|
||||||
|
(PTHREAD_CANCEL_DISABLE, &state), 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
error = exec_comm (comm, word, word_length, max_length,
|
error = exec_comm (comm, word, word_length, max_length,
|
||||||
flags, pwordexp, ifs, ifs_white);
|
flags, pwordexp, ifs, ifs_white);
|
||||||
|
|
||||||
|
#ifdef __libc_ptf_call
|
||||||
|
__libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
free (comm);
|
free (comm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Get system load averages. Linux (/proc/loadavg) version.
|
/* Get system load averages. Linux (/proc/loadavg) version.
|
||||||
Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -22,6 +22,7 @@
|
|||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <not-cancel.h>
|
||||||
|
|
||||||
/* Put the 1 minute, 5 minute and 15 minute load averages
|
/* Put the 1 minute, 5 minute and 15 minute load averages
|
||||||
into the first NELEM elements of LOADAVG.
|
into the first NELEM elements of LOADAVG.
|
||||||
@ -33,7 +34,7 @@ getloadavg (double loadavg[], int nelem)
|
|||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
fd = __open ("/proc/loadavg", O_RDONLY);
|
fd = open_not_cancel_2 ("/proc/loadavg", O_RDONLY);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
@ -42,8 +43,8 @@ getloadavg (double loadavg[], int nelem)
|
|||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
nread = __read (fd, buf, sizeof buf - 1);
|
nread = read_not_cancel (fd, buf, sizeof buf - 1);
|
||||||
__close (fd);
|
close_not_cancel_no_status (fd);
|
||||||
if (nread < 0)
|
if (nread < 0)
|
||||||
return -1;
|
return -1;
|
||||||
buf[nread - 1] = '\0';
|
buf[nread - 1] = '\0';
|
||||||
|
Reference in New Issue
Block a user