From 0bdf96aaeb00ac4672cd917d8acdd17622e66a95 Mon Sep 17 00:00:00 2001 From: cgf Date: Wed, 12 Jan 2005 22:40:41 +0000 Subject: [PATCH] Reorganize header file inclusion throughout so that cygerrno.h comes first. * fhandler.h (select_record::thread_errno): Save any encountered errno here. (select_record::set_select_errno): New function. (select_record::saw_error): New function. (select_record::select_record): Initialize thread_errno to zero. * select.cc (set_handle_or_return_if_not_open): Set thread_errno on failure. (select_stuff::wait): Record errno for later resurrection in calling thread. (peek_serial): Ditto. --- winsup/cygwin/ChangeLog | 15 +++++++++++++++ winsup/cygwin/cygheap.cc | 2 +- winsup/cygwin/dlfcn.cc | 2 +- winsup/cygwin/dtable.cc | 6 +++--- winsup/cygwin/environ.cc | 2 +- winsup/cygwin/exec.cc | 2 +- winsup/cygwin/fcntl.cc | 2 +- winsup/cygwin/fhandler.h | 6 ++++-- winsup/cygwin/fhandler_floppy.cc | 2 +- winsup/cygwin/fhandler_zero.cc | 1 + winsup/cygwin/fork.cc | 2 +- winsup/cygwin/grp.cc | 2 +- winsup/cygwin/malloc_wrapper.cc | 2 +- winsup/cygwin/mmap.cc | 2 +- winsup/cygwin/pinfo.cc | 2 +- winsup/cygwin/poll.cc | 2 +- winsup/cygwin/registry.cc | 2 +- winsup/cygwin/select.cc | 19 ++++++++++--------- winsup/cygwin/shared.cc | 2 +- winsup/cygwin/strace.cc | 2 +- winsup/cygwin/sysconf.cc | 2 +- winsup/cygwin/syslog.cc | 2 +- winsup/cygwin/uinfo.cc | 2 +- 23 files changed, 51 insertions(+), 32 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 82e29f15e0..aa8f6a2581 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,20 @@ 2005-01-12 Christopher Faylor + Reorganize header file inclusion throughout so that cygerrno.h comes + first. + * fhandler.h (select_record::thread_errno): Save any encountered errno + here. + (select_record::set_select_errno): New function. + (select_record::saw_error): New function. + (select_record::select_record): Initialize thread_errno to zero. + * select.cc (set_handle_or_return_if_not_open): Set thread_errno on + failure. + (select_stuff::wait): Record errno for later resurrection in calling + thread. + (peek_serial): Ditto. + +2005-01-12 Christopher Faylor + * syscalls.cc (system): Use "/bin/sh" as per linux and (sorta) SUSv3. 2005-01-12 Christopher Faylor diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc index 14cdd8d845..192128c81f 100644 --- a/winsup/cygwin/cygheap.cc +++ b/winsup/cygwin/cygheap.cc @@ -12,11 +12,11 @@ #include #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "child_info.h" #include "heap.h" diff --git a/winsup/cygwin/dlfcn.cc b/winsup/cygwin/dlfcn.cc index 3934428ca4..fecb328092 100644 --- a/winsup/cygwin/dlfcn.cc +++ b/winsup/cygwin/dlfcn.cc @@ -14,6 +14,7 @@ details. */ #include #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" @@ -21,7 +22,6 @@ details. */ #include "thread.h" #include "dlfcn.h" #include "dll_init.h" -#include "cygerrno.h" #include "cygtls.h" static void __stdcall diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 38e5057cf7..a699553c14 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -584,7 +584,7 @@ dtable::select_read (int fd, select_record *s) s = fh->select_read (s); s->fd = fd; s->fh = fh; - s->saw_error = 0; + s->thread_errno = 0; debug_printf ("%s fd %d", fh->get_name (), fd); return s; } @@ -601,7 +601,7 @@ dtable::select_write (int fd, select_record *s) s = fh->select_write (s); s->fd = fd; s->fh = fh; - s->saw_error = 0; + s->thread_errno = 0; debug_printf ("%s fd %d", fh->get_name (), fd); return s; } @@ -618,7 +618,7 @@ dtable::select_except (int fd, select_record *s) s = fh->select_except (s); s->fd = fd; s->fh = fh; - s->saw_error = 0; + s->thread_errno = 0; debug_printf ("%s fd %d", fh->get_name (), fd); return s; } diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc index 121a67d261..961dd97cea 100644 --- a/winsup/cygwin/environ.cc +++ b/winsup/cygwin/environ.cc @@ -18,8 +18,8 @@ details. */ #include "perprocess.h" #include "security.h" #include "path.h" -#include "fhandler.h" #include "cygerrno.h" +#include "fhandler.h" #include "dtable.h" #include "cygheap.h" #include "registry.h" diff --git a/winsup/cygwin/exec.cc b/winsup/cygwin/exec.cc index ffc13ab412..2276545db3 100644 --- a/winsup/cygwin/exec.cc +++ b/winsup/cygwin/exec.cc @@ -13,13 +13,13 @@ details. */ #include #include #include +#include "cygerrno.h" #include "perprocess.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "pinfo.h" #include "environ.h" -#include "cygerrno.h" #undef _execve /* This is called _execve and not execve because the real execve is defined diff --git a/winsup/cygwin/fcntl.cc b/winsup/cygwin/fcntl.cc index d81126f52e..b1f0d9972e 100644 --- a/winsup/cygwin/fcntl.cc +++ b/winsup/cygwin/fcntl.cc @@ -11,11 +11,11 @@ details. */ #include "winsup.h" #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "thread.h" diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index df02ece23c..47b216cda5 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -1216,7 +1216,7 @@ struct select_record int fd; HANDLE h; fhandler_base *fh; - bool saw_error; + int thread_errno; bool windows_handle; bool read_ready, write_ready, except_ready; bool read_selected, write_selected, except_selected; @@ -1227,9 +1227,11 @@ struct select_record fd_set *exceptfds); void (*cleanup) (select_record *me, class select_stuff *stuff); struct select_record *next; + void set_select_errno () {__seterrno (); thread_errno = errno;} + int saw_error () {return thread_errno;} select_record (fhandler_base *in_fh = NULL) : fd (0), h (NULL), - fh (in_fh), saw_error (false), windows_handle (false), + fh (in_fh), thread_errno (0), windows_handle (false), read_ready (false), write_ready (false), except_ready (false), read_selected (false), write_selected (false), except_selected (false), except_on_write (false), diff --git a/winsup/cygwin/fhandler_floppy.cc b/winsup/cygwin/fhandler_floppy.cc index 3c8870ed4e..cbf87c3303 100644 --- a/winsup/cygwin/fhandler_floppy.cc +++ b/winsup/cygwin/fhandler_floppy.cc @@ -16,10 +16,10 @@ details. */ #include #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" -#include "cygerrno.h" /**********************************************************************/ /* fhandler_dev_floppy */ diff --git a/winsup/cygwin/fhandler_zero.cc b/winsup/cygwin/fhandler_zero.cc index e44599b61b..0536bd69cd 100644 --- a/winsup/cygwin/fhandler_zero.cc +++ b/winsup/cygwin/fhandler_zero.cc @@ -13,6 +13,7 @@ details. */ #include "winsup.h" #include #include "security.h" +#include "cygerrno.h" #include "path.h" #include "fhandler.h" diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index b0478144dd..b46d0329f0 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -13,11 +13,11 @@ details. */ #include #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "sigproc.h" #include "pinfo.h" #include "cygheap.h" diff --git a/winsup/cygwin/grp.cc b/winsup/cygwin/grp.cc index 4edfc41283..0574e924b9 100644 --- a/winsup/cygwin/grp.cc +++ b/winsup/cygwin/grp.cc @@ -16,12 +16,12 @@ details. */ #include #include #include +#include "cygerrno.h" #include "pinfo.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "pwdgrp.h" #include "cygtls.h" diff --git a/winsup/cygwin/malloc_wrapper.cc b/winsup/cygwin/malloc_wrapper.cc index 179b91b038..edf7e546ed 100644 --- a/winsup/cygwin/malloc_wrapper.cc +++ b/winsup/cygwin/malloc_wrapper.cc @@ -14,11 +14,11 @@ details. */ #include "winsup.h" #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "heap.h" #include "sync.h" diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc index d46ddd21e6..b560013284 100644 --- a/winsup/cygwin/mmap.cc +++ b/winsup/cygwin/mmap.cc @@ -13,11 +13,11 @@ details. */ #include #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "pinfo.h" #include "sys/cygwin.h" diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc index 2e39ebbd66..84a66ed53b 100644 --- a/winsup/cygwin/pinfo.cc +++ b/winsup/cygwin/pinfo.cc @@ -14,11 +14,11 @@ details. */ #include #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "sigproc.h" #include "pinfo.h" #include "cygwin_version.h" diff --git a/winsup/cygwin/poll.cc b/winsup/cygwin/poll.cc index 4afbac8580..9fd0997326 100644 --- a/winsup/cygwin/poll.cc +++ b/winsup/cygwin/poll.cc @@ -18,11 +18,11 @@ #include #define USE_SYS_TYPES_FD_SET #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "sigproc.h" diff --git a/winsup/cygwin/registry.cc b/winsup/cygwin/registry.cc index d2756a8e9a..543f049c16 100644 --- a/winsup/cygwin/registry.cc +++ b/winsup/cygwin/registry.cc @@ -13,10 +13,10 @@ details. */ #include "registry.h" #include "security.h" #include +#include "cygerrno.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" static const char cygnus_class[] = "cygnus"; diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index c943b2a1c7..105b7233f8 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -28,8 +28,8 @@ details. */ #include #define USE_SYS_TYPES_FD_SET #include -#include "select.h" #include "cygerrno.h" +#include "select.h" #include "security.h" #include "path.h" #include "fhandler.h" @@ -85,8 +85,7 @@ typedef long fd_mask; h = (s)->fh->get_handle (); \ if (cygheap->fdtab.not_open ((s)->fd)) \ { \ - (s)->saw_error = true; \ - set_sig_errno (EBADF); \ + (s)->thread_errno = EBADF; \ return -1; \ } \ @@ -238,7 +237,7 @@ select_stuff::wait (fd_set *readfds, fd_set *writefds, fd_set *exceptfds, } if (!s->startup (s, this)) { - __seterrno (); + s->set_select_errno (); return -1; } if (s->h == NULL) @@ -269,7 +268,7 @@ select_stuff::wait (fd_set *readfds, fd_set *writefds, fd_set *exceptfds, return -1; case WAIT_FAILED: select_printf ("WaitForMultipleObjects failed"); - __seterrno (); + s->set_select_errno (); return -1; case WAIT_TIMEOUT: select_printf ("timed out"); @@ -285,8 +284,11 @@ select_stuff::wait (fd_set *readfds, fd_set *writefds, fd_set *exceptfds, If it returns false, then this wakeup was a false alarm and we should go back to waiting. */ while ((s = s->next)) - if (s->saw_error) - return -1; /* Somebody detected an error */ + if (s->saw_error ()) + { + set_errno (s->saw_error ()); + return -1; /* Somebody detected an error */ + } else if ((((wait_ret >= m && s->windows_handle) || s->h == w4[wait_ret])) && s->verify (s, readfds, writefds, exceptfds)) gotone = true; @@ -1005,8 +1007,7 @@ err: return ready; } - __seterrno (); - s->saw_error = true; + s->set_select_errno (); select_printf ("error %E"); return -1; } diff --git a/winsup/cygwin/shared.cc b/winsup/cygwin/shared.cc index 6ef11c337c..5cc8436836 100644 --- a/winsup/cygwin/shared.cc +++ b/winsup/cygwin/shared.cc @@ -14,12 +14,12 @@ details. */ #include #include #include +#include "cygerrno.h" #include "pinfo.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "heap.h" #include "shared_info_magic.h" diff --git a/winsup/cygwin/strace.cc b/winsup/cygwin/strace.cc index fcbe16f08a..6b0b74df2f 100644 --- a/winsup/cygwin/strace.cc +++ b/winsup/cygwin/strace.cc @@ -14,6 +14,7 @@ details. */ #include #include #include +#include "cygerrno.h" #include "pinfo.h" #include "perprocess.h" #include "cygwin_version.h" @@ -23,7 +24,6 @@ details. */ #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #define PROTECT(x) x[sizeof (x)-1] = 0 diff --git a/winsup/cygwin/sysconf.cc b/winsup/cygwin/sysconf.cc index 7a7671a843..54346f692f 100644 --- a/winsup/cygwin/sysconf.cc +++ b/winsup/cygwin/sysconf.cc @@ -13,11 +13,11 @@ details. */ #include #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "ntdll.h" diff --git a/winsup/cygwin/syslog.cc b/winsup/cygwin/syslog.cc index c053c224c6..62f6063993 100644 --- a/winsup/cygwin/syslog.cc +++ b/winsup/cygwin/syslog.cc @@ -14,11 +14,11 @@ details. */ #include #include #include +#include "cygerrno.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "thread.h" #include "cygtls.h" diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc index ceab9099c1..4c5dc23c8a 100644 --- a/winsup/cygwin/uinfo.cc +++ b/winsup/cygwin/uinfo.cc @@ -18,12 +18,12 @@ details. */ #include #include #include +#include "cygerrno.h" #include "pinfo.h" #include "security.h" #include "path.h" #include "fhandler.h" #include "dtable.h" -#include "cygerrno.h" #include "cygheap.h" #include "registry.h" #include "child_info.h" -- 2.11.0