From d0a9ace301659a82d936cfba740564f6a9ec288a Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 22 Apr 2011 23:20:28 +0000 Subject: [PATCH] * descriptors.cc (set_close_on_exec): New function. (Descriptors::open): Use set_close_on_exec. * output.cc (S_ISLNK): Define if not defined. --- gold/ChangeLog | 6 ++++++ gold/descriptors.cc | 19 ++++++++++++++----- gold/output.cc | 5 +++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index c4c02f6670..d9da5f8062 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2011-04-22 Vladimir Simonov + + * descriptors.cc (set_close_on_exec): New function. + (Descriptors::open): Use set_close_on_exec. + * output.cc (S_ISLNK): Define if not defined. + 2011-04-22 Cary Coutant * incremental.cc (Sized_incremental_binary::setup_readers): Allocate diff --git a/gold/descriptors.cc b/gold/descriptors.cc index db8ad6753d..2ab0d5c881 100644 --- a/gold/descriptors.cc +++ b/gold/descriptors.cc @@ -1,6 +1,6 @@ // descriptors.cc -- manage file descriptors for gold -// Copyright 2008, 2009 Free Software Foundation, Inc. +// Copyright 2008, 2009, 2010, 2011 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -34,15 +34,24 @@ #include "descriptors.h" #include "binary-io.h" +// O_CLOEXEC is only available on newer systems. +#ifndef O_CLOEXEC +#define O_CLOEXEC 0 +#endif + // Very old systems may not define FD_CLOEXEC. #ifndef FD_CLOEXEC #define FD_CLOEXEC 1 #endif -// O_CLOEXEC is only available on newer systems. -#ifndef O_CLOEXEC -#define O_CLOEXEC 0 +static inline void +set_close_on_exec(int fd) +{ +// Mingw does not define F_SETFD. +#ifdef F_SETFD + fcntl(fd, F_SETFD, FD_CLOEXEC); #endif +} namespace gold { @@ -133,7 +142,7 @@ Descriptors::open(int descriptor, const char* name, int flags, int mode) if (O_CLOEXEC == 0 && parameters->options_valid() && parameters->options().has_plugins()) - fcntl(new_descriptor, F_SETFD, FD_CLOEXEC); + set_close_on_exec(new_descriptor); { Hold_optional_lock hl(this->lock_); diff --git a/gold/output.cc b/gold/output.cc index 26f843c60d..70379bbce7 100644 --- a/gold/output.cc +++ b/gold/output.cc @@ -121,6 +121,11 @@ posix_fallocate(int o, off_t offset, off_t len) } #endif // !defined(HAVE_POSIX_FALLOCATE) +// Mingw does not have S_ISLNK. +#ifndef S_ISLNK +# define S_ISLNK(mode) 0 +#endif + namespace gold {