From 7460bfd32bd2680383c72d7d26ccb7776ccffb00 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 13 Apr 2005 16:41:33 +0000 Subject: [PATCH] * cygerrno.h (__seterrno_from_nt_status): Define. Always set Win32 error code as well as errno. Use throughout where errno is set from NT status. (set_errno): Evaluate val only once. * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Fix typo in debug output. * fhandler_mem.cc (fhandler_dev_mem::open): Rely on __seterrno_from_nt_status setting Win32 error code in debug output. * fhandler_proc.cc (format_proc_uptime): Ditto. (format_proc_stat): Ditto. * fhandler_process.cc (format_process_stat): Ditto. * sysconf.cc (sysconf): Ditto. --- winsup/cygwin/ChangeLog | 15 +++++++++++++++ winsup/cygwin/cygerrno.h | 8 +++++++- winsup/cygwin/fhandler.cc | 2 +- winsup/cygwin/fhandler_disk_file.cc | 2 +- winsup/cygwin/fhandler_mem.cc | 23 +++++++++++------------ winsup/cygwin/fhandler_proc.cc | 15 ++++++--------- winsup/cygwin/fhandler_process.cc | 5 ++--- winsup/cygwin/mmap.cc | 4 ++-- winsup/cygwin/security.cc | 6 +++--- winsup/cygwin/sysconf.cc | 12 ++++++------ 10 files changed, 54 insertions(+), 38 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index c1d3bda5a..6923a0c6b 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,18 @@ +2005-04-13 Corinna Vinschen + + * cygerrno.h (__seterrno_from_nt_status): Define. Always set Win32 + error code as well as errno. Use throughout where errno is set from + NT status. + (set_errno): Evaluate val only once. + * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Fix typo in + debug output. + * fhandler_mem.cc (fhandler_dev_mem::open): Rely on + __seterrno_from_nt_status setting Win32 error code in debug output. + * fhandler_proc.cc (format_proc_uptime): Ditto. + (format_proc_stat): Ditto. + * fhandler_process.cc (format_process_stat): Ditto. + * sysconf.cc (sysconf): Ditto. + 2005-04-13 Christopher Faylor * fhandler.h (fhandler_base::utimes_fs): New method. diff --git a/winsup/cygwin/cygerrno.h b/winsup/cygwin/cygerrno.h index c1a0fd821..f3be0ce1b 100644 --- a/winsup/cygwin/cygerrno.h +++ b/winsup/cygwin/cygerrno.h @@ -16,9 +16,15 @@ int __stdcall geterrno_from_win_error (DWORD code, int deferrno) __attribute__ ( #define __seterrno() seterrno (__FILE__, __LINE__) #define __seterrno_from_win_error(val) seterrno_from_win_error (__FILE__, __LINE__, val) +#define __seterrno_from_nt_status(status) \ + ({ \ + DWORD winerr = RtlNtStatusToDosError (status); \ + SetLastError (winerr); \ + __seterrno_from_win_error (winerr); \ + }) #ifndef DEBUGGING -#define set_errno(val) (errno = (val), _impure_ptr->_errno = (val)) +#define set_errno(val) (errno = _impure_ptr->_errno = (val)) #else int __stdcall __set_errno (const char *ln, int ln, int val) __attribute ((regparm(3))); #define set_errno(val) __set_errno (__PRETTY_FUNCTION__, __LINE__, (val)) diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index c64dcb1c9..b21b973a4 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -665,7 +665,7 @@ fhandler_base::open (int flags, mode_t mode) create_disposition, create_options, NULL, 0); if (!NT_SUCCESS (status)) { - __seterrno_from_win_error (RtlNtStatusToDosError (status)); + __seterrno_from_nt_status (status); if (!nohandle ()) goto done; } diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index 1fe371341..80d762ddc 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -141,7 +141,7 @@ fhandler_base::fstat_by_handle (struct __stat64 *buf) pfai->InternalInformation.IndexNumber.LowPart, pfai->StandardInformation.NumberOfLinks); - debug_printf ("%u = NtQuerynformationFile)", + debug_printf ("%u = NtQueryInformationFile)", RtlNtStatusToDosError (status)); } diff --git a/winsup/cygwin/fhandler_mem.cc b/winsup/cygwin/fhandler_mem.cc index 431ecb85d..ff1798cae 100644 --- a/winsup/cygwin/fhandler_mem.cc +++ b/winsup/cygwin/fhandler_mem.cc @@ -48,9 +48,8 @@ fhandler_dev_mem::open (int flags, mode_t) if ((ret = NtQuerySystemInformation (SystemBasicInformation, (PVOID) &sbi, sizeof sbi, NULL)) != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); - debug_printf("NtQuerySystemInformation: ret %d, Dos(ret) %d", - ret, RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); + debug_printf("NtQuerySystemInformation: ret %d, Dos(ret) %E", ret); mem_size = 0; } else @@ -109,7 +108,7 @@ fhandler_dev_mem::open (int flags, mode_t) NTSTATUS ret = NtOpenSection (&mem, section_access, &attr); if (!NT_SUCCESS (ret)) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); set_io_handle (NULL); return 0; } @@ -151,7 +150,7 @@ fhandler_dev_mem::write (const void *ptr, size_t ulen) 0, PAGE_READONLY)) != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); return -1; } @@ -159,7 +158,7 @@ fhandler_dev_mem::write (const void *ptr, size_t ulen) if (!NT_SUCCESS (ret = NtUnmapViewOfSection (INVALID_HANDLE_VALUE, viewmem))) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); return -1; } @@ -203,7 +202,7 @@ fhandler_dev_mem::read (void *ptr, size_t& ulen) 0, PAGE_READONLY)) != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); ulen = (size_t) -1; return; } @@ -212,7 +211,7 @@ fhandler_dev_mem::read (void *ptr, size_t& ulen) if (!NT_SUCCESS (ret = NtUnmapViewOfSection (INVALID_HANDLE_VALUE, viewmem))) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); ulen = (size_t) -1; return; } @@ -303,7 +302,7 @@ fhandler_dev_mem::mmap (caddr_t *addr, size_t len, DWORD access, NTSTATUS ret = NtOpenSection (&h, section_access, &attr); if (!NT_SUCCESS (ret)) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); syscall_printf ("-1 = mmap(): NtOpenSection failed with %E"); return INVALID_HANDLE_VALUE; } @@ -325,7 +324,7 @@ fhandler_dev_mem::mmap (caddr_t *addr, size_t len, DWORD access, 0, protect)) != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); syscall_printf ("-1 = mmap(): NtMapViewOfSection failed with %E"); return INVALID_HANDLE_VALUE; } @@ -347,7 +346,7 @@ fhandler_dev_mem::munmap (HANDLE h, caddr_t addr, size_t len) NTSTATUS ret; if (!NT_SUCCESS (ret = NtUnmapViewOfSection (INVALID_HANDLE_VALUE, addr))) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); return -1; } CloseHandle (h); @@ -391,7 +390,7 @@ fhandler_dev_mem::fixup_mmap_after_fork (HANDLE h, DWORD access, int flags, 0, protect)) != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); syscall_printf ("-1 = fixup_mmap_after_fork(): NtMapViewOfSection failed with %E"); return false; } diff --git a/winsup/cygwin/fhandler_proc.cc b/winsup/cygwin/fhandler_proc.cc index e4fc918e9..2086939ee 100644 --- a/winsup/cygwin/fhandler_proc.cc +++ b/winsup/cygwin/fhandler_proc.cc @@ -477,9 +477,8 @@ format_proc_uptime (char *destbuf, size_t maxsize) } else if (ret != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); - debug_printf("NtQuerySystemInformation: ret %d, Dos(ret) %d", - ret, RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); + debug_printf("NtQuerySystemInformation: ret %d, Dos(ret) %E", ret); return 0; } } @@ -514,9 +513,8 @@ format_proc_stat (char *destbuf, size_t maxsize) (PVOID) &sbi, sizeof sbi, NULL)) != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); - debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %d", - ret, RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); + debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %E", ret); sbi.NumberProcessors = 1; } @@ -556,9 +554,8 @@ format_proc_stat (char *destbuf, size_t maxsize) sizeof stodi, NULL); if (ret != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); - debug_printf("NtQuerySystemInformation: ret %d, Dos(ret) %d", - ret, RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); + debug_printf("NtQuerySystemInformation: ret %d, Dos(ret) %E", ret); return 0; } pages_in = spi.PagesRead; diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc index 0454e64b0..180155f32 100644 --- a/winsup/cygwin/fhandler_process.cc +++ b/winsup/cygwin/fhandler_process.cc @@ -683,9 +683,8 @@ format_process_stat (_pinfo *p, char *destbuf, size_t maxsize) sizeof spt, NULL); if (ret != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); - debug_printf ("NtQueryInformationProcess: ret %d, Dos(ret) %d", - ret, RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); + debug_printf ("NtQueryInformationProcess: ret %d, Dos(ret) %E", ret); return 0; } fault_count = vmc.PageFaultCount; diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc index e1cda7b44..3c2a1187b 100644 --- a/winsup/cygwin/mmap.cc +++ b/winsup/cygwin/mmap.cc @@ -1115,7 +1115,7 @@ fhandler_disk_file::mmap (caddr_t *addr, size_t len, DWORD access, base ? AT_ROUND_TO_PAGE : 0, protect); if (ret != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); base = NULL; } else @@ -1196,7 +1196,7 @@ fhandler_disk_file::fixup_mmap_after_fork (HANDLE h, DWORD access, int flags, ulen, &phys, &ulen, ViewShare, AT_ROUND_TO_PAGE, protect); if (ret != STATUS_SUCCESS) - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); } else base = MapViewOfFileEx (h, access, 0, offset, size, address); diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc index 44ae8b477..e74fd8df8 100644 --- a/winsup/cygwin/security.cc +++ b/winsup/cygwin/security.cc @@ -931,7 +931,7 @@ create_token (cygsid &usersid, user_groups &new_groups, struct passwd *pw) &auth_luid, &exp, &user, new_tok_gsids, privs, &owner, &pgrp, &dacl, &source); if (ret) - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); else if (GetLastError () == ERROR_PROC_NOT_FOUND) { __seterrno (); @@ -1153,7 +1153,7 @@ write_sd (HANDLE fh, const char *file, security_descriptor &sd) if (fh == INVALID_HANDLE_VALUE) /* CreateFile failed */ __seterrno (); else if (ret != STATUS_SUCCESS) /* NtSetSecurityObject failed */ - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); else /* Everything's fine. */ res = 0; return res; @@ -1348,7 +1348,7 @@ get_nt_object_security (HANDLE handle, SE_OBJECT_TYPE object_type, } if (ret != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); return -1; } return 0; diff --git a/winsup/cygwin/sysconf.cc b/winsup/cygwin/sysconf.cc index 54346f692..b50688fd4 100644 --- a/winsup/cygwin/sysconf.cc +++ b/winsup/cygwin/sysconf.cc @@ -79,9 +79,9 @@ sysconf (int in) sizeof sbi, NULL)) != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); - debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %d", - ret, RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); + debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %E", + ret); return -1; } switch (in) @@ -112,9 +112,9 @@ sysconf (int in) sizeof spi, NULL)) != STATUS_SUCCESS) { - __seterrno_from_win_error (RtlNtStatusToDosError (ret)); - debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %d", - ret, RtlNtStatusToDosError (ret)); + __seterrno_from_nt_status (ret); + debug_printf ("NtQuerySystemInformation: ret %d, Dos(ret) %E", + ret); return -1; } return spi.AvailablePages; -- 2.43.5