Annotation of embedaddon/libiconv/srclib/read.c, revision 1.1
1.1 ! misho 1: /* POSIX compatible read() function.
! 2: Copyright (C) 2008-2011 Free Software Foundation, Inc.
! 3: Written by Bruno Haible <bruno@clisp.org>, 2011.
! 4:
! 5: This program is free software: you can redistribute it and/or modify
! 6: it under the terms of the GNU General Public License as published by
! 7: the Free Software Foundation; either version 3 of the License, or
! 8: (at your option) any later version.
! 9:
! 10: This program is distributed in the hope that it will be useful,
! 11: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 13: GNU General Public License for more details.
! 14:
! 15: You should have received a copy of the GNU General Public License
! 16: along with this program. If not, see <http://www.gnu.org/licenses/>. */
! 17:
! 18: #include <config.h>
! 19:
! 20: /* Specification. */
! 21: #include <unistd.h>
! 22:
! 23: /* Replace this function only if module 'nonblocking' is requested. */
! 24: #if GNULIB_NONBLOCKING
! 25:
! 26: # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
! 27:
! 28: # include <errno.h>
! 29: # include <io.h>
! 30:
! 31: # define WIN32_LEAN_AND_MEAN /* avoid including junk */
! 32: # include <windows.h>
! 33:
! 34: ssize_t
! 35: rpl_read (int fd, void *buf, size_t count)
! 36: #undef read
! 37: {
! 38: ssize_t ret = read (fd, buf, count);
! 39:
! 40: if (ret < 0
! 41: && GetLastError () == ERROR_NO_DATA)
! 42: {
! 43: HANDLE h = (HANDLE) _get_osfhandle (fd);
! 44: if (GetFileType (h) == FILE_TYPE_PIPE)
! 45: {
! 46: /* h is a pipe or socket. */
! 47: DWORD state;
! 48: if (GetNamedPipeHandleState (h, &state, NULL, NULL, NULL, NULL, 0)
! 49: && (state & PIPE_NOWAIT) != 0)
! 50: /* h is a pipe in non-blocking mode.
! 51: Change errno from EINVAL to EAGAIN. */
! 52: errno = EAGAIN;
! 53: }
! 54: }
! 55: return ret;
! 56: }
! 57:
! 58: # endif
! 59: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>