mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-18 12:24:38 +08:00
Minor O_CLOEXEC optimization, "regression" fix
gdb/ 2013-10-09 Jan Kratochvil <jan.kratochvil@redhat.com> * common/filestuff.c (gdb_fopen_cloexec): Remove initialization of result variable. Rename variable fopen_e_ever_failed to fopen_e_ever_failed_einval. Retry fopen only for errno EINVAL.
This commit is contained in:
parent
915215be09
commit
c74e1ccf71
@ -1,3 +1,9 @@
|
||||
2013-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* common/filestuff.c (gdb_fopen_cloexec): Remove initialization of
|
||||
result variable. Rename variable fopen_e_ever_failed to
|
||||
fopen_e_ever_failed_einval. Retry fopen only for errno EINVAL.
|
||||
|
||||
2013-10-09 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* monitor.c (monitor_write_memory, monitor_write_memory_bytes)
|
||||
|
@ -310,16 +310,16 @@ gdb_open_cloexec (const char *filename, int flags, unsigned long mode)
|
||||
FILE *
|
||||
gdb_fopen_cloexec (const char *filename, const char *opentype)
|
||||
{
|
||||
FILE *result = NULL;
|
||||
FILE *result;
|
||||
/* Probe for "e" support once. But, if we can tell the operating
|
||||
system doesn't know about close on exec mode "e" without probing,
|
||||
skip it. E.g., the Windows runtime issues an "Invalid parameter
|
||||
passed to C runtime function" OutputDebugString warning for
|
||||
unknown modes. Assume that if O_CLOEXEC is zero, then "e" isn't
|
||||
supported. */
|
||||
static int fopen_e_ever_failed = O_CLOEXEC == 0;
|
||||
static int fopen_e_ever_failed_einval = O_CLOEXEC == 0;
|
||||
|
||||
if (!fopen_e_ever_failed)
|
||||
if (!fopen_e_ever_failed_einval)
|
||||
{
|
||||
char *copy;
|
||||
|
||||
@ -329,15 +329,16 @@ gdb_fopen_cloexec (const char *filename, const char *opentype)
|
||||
this path. */
|
||||
strcat (copy, "e");
|
||||
result = fopen (filename, copy);
|
||||
}
|
||||
|
||||
if (result == NULL)
|
||||
{
|
||||
/* Fallback. */
|
||||
result = fopen (filename, opentype);
|
||||
if (result != NULL)
|
||||
fopen_e_ever_failed = 1;
|
||||
if (result == NULL && errno == EINVAL)
|
||||
{
|
||||
result = fopen (filename, opentype);
|
||||
if (result != NULL)
|
||||
fopen_e_ever_failed_einval = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
result = fopen (filename, opentype);
|
||||
|
||||
if (result != NULL)
|
||||
maybe_mark_cloexec (fileno (result));
|
||||
|
Loading…
Reference in New Issue
Block a user