Mercurial > hg > octave-jordi > gnulib-hg
changeset 17767:bc4693f4bc9b
modules/fcntl: fix error reporting by dupfd
* lib/fcntl.c (dupfd) [_WIN32]: Don't overwrite the value of
errno set by _open_osfhandle by EMFILE. Convert errors
returned by DuplicateHandle to corresponding errno values.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Tue, 07 Oct 2014 20:59:11 +0300 |
parents | 9d6a89b53b85 |
children | 590723b95600 |
files | lib/fcntl.c |
diffstat | 1 files changed, 19 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/fcntl.c +++ b/lib/fcntl.c @@ -89,8 +89,25 @@ inherit, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ { - /* TODO: Translate GetLastError () into errno. */ - errno = EMFILE; + switch (GetLastError ()) + { + case ERROR_TOO_MANY_OPEN_FILES: + errno = EMFILE; + break; + case ERROR_INVALID_HANDLE: + case ERROR_INVALID_TARGET_HANDLE: + case ERROR_DIRECT_ACCESS_HANDLE: + errno = EBADF; + break; + case ERROR_INVALID_PARAMETER: + case ERROR_INVALID_FUNCTION: + case ERROR_INVALID_ACCESS: + errno = EINVAL; + break; + default: + errno = EACCES; + break; + } result = -1; break; } @@ -98,7 +115,6 @@ if (duplicated_fd < 0) { CloseHandle (new_handle); - errno = EMFILE; result = -1; break; }