diff options
Diffstat (limited to 'gl/stdio-write.c')
| -rw-r--r-- | gl/stdio-write.c | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/gl/stdio-write.c b/gl/stdio-write.c index f1d0fcb7..f7da9e42 100644 --- a/gl/stdio-write.c +++ b/gl/stdio-write.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* POSIX compatible FILE stream write function. | 1 | /* POSIX compatible FILE stream write function. |
| 2 | Copyright (C) 2008 Free Software Foundation, Inc. | 2 | Copyright (C) 2008-2010 Free Software Foundation, Inc. |
| 3 | Written by Bruno Haible <bruno@clisp.org>, 2008. | 3 | Written by Bruno Haible <bruno@clisp.org>, 2008. |
| 4 | 4 | ||
| 5 | This program is free software: you can redistribute it and/or modify | 5 | This program is free software: you can redistribute it and/or modify |
| @@ -39,30 +39,31 @@ | |||
| 39 | # include <windows.h> | 39 | # include <windows.h> |
| 40 | 40 | ||
| 41 | # define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \ | 41 | # define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \ |
| 42 | if (ferror (stream)) \ | 42 | if (ferror (stream)) \ |
| 43 | return (EXPRESSION); \ | 43 | return (EXPRESSION); \ |
| 44 | else \ | 44 | else \ |
| 45 | { \ | 45 | { \ |
| 46 | RETTYPE ret; \ | 46 | RETTYPE ret; \ |
| 47 | SetLastError (0); \ | 47 | SetLastError (0); \ |
| 48 | ret = (EXPRESSION); \ | 48 | ret = (EXPRESSION); \ |
| 49 | if (FAILED && GetLastError () == ERROR_NO_DATA && ferror (stream)) \ | 49 | if (FAILED && GetLastError () == ERROR_NO_DATA && ferror (stream)) \ |
| 50 | { \ | 50 | { \ |
| 51 | int fd = fileno (stream); \ | 51 | int fd = fileno (stream); \ |
| 52 | if (fd >= 0 \ | 52 | if (fd >= 0 \ |
| 53 | && GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE)\ | 53 | && GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE)\ |
| 54 | { \ | 54 | { \ |
| 55 | /* Try to raise signal SIGPIPE. */ \ | 55 | /* Try to raise signal SIGPIPE. */ \ |
| 56 | raise (SIGPIPE); \ | 56 | raise (SIGPIPE); \ |
| 57 | /* If it is currently blocked or ignored, change errno from \ | 57 | /* If it is currently blocked or ignored, change errno from \ |
| 58 | EINVAL to EPIPE. */ \ | 58 | EINVAL to EPIPE. */ \ |
| 59 | errno = EPIPE; \ | 59 | errno = EPIPE; \ |
| 60 | } \ | 60 | } \ |
| 61 | } \ | 61 | } \ |
| 62 | return ret; \ | 62 | return ret; \ |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | # if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */ | 65 | # if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */ |
| 66 | # if !DEPENDS_ON_LIBINTL /* avoid collision with intl/printf.c */ | ||
| 66 | int | 67 | int |
| 67 | printf (const char *format, ...) | 68 | printf (const char *format, ...) |
| 68 | { | 69 | { |
| @@ -75,6 +76,7 @@ printf (const char *format, ...) | |||
| 75 | 76 | ||
| 76 | return retval; | 77 | return retval; |
| 77 | } | 78 | } |
| 79 | # endif | ||
| 78 | # endif | 80 | # endif |
| 79 | 81 | ||
| 80 | # if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */ | 82 | # if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */ |
| @@ -92,7 +94,7 @@ fprintf (FILE *stream, const char *format, ...) | |||
| 92 | } | 94 | } |
| 93 | # endif | 95 | # endif |
| 94 | 96 | ||
| 95 | # if !REPLACE_VFPRINTF_POSIX /* avoid collision with vprintf.c */ | 97 | # if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */ |
| 96 | int | 98 | int |
| 97 | vprintf (const char *format, va_list args) | 99 | vprintf (const char *format, va_list args) |
| 98 | { | 100 | { |
| @@ -100,7 +102,7 @@ vprintf (const char *format, va_list args) | |||
| 100 | } | 102 | } |
| 101 | # endif | 103 | # endif |
| 102 | 104 | ||
| 103 | # if !REPLACE_VPRINTF_POSIX /* avoid collision with vfprintf.c */ | 105 | # if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */ |
| 104 | int | 106 | int |
| 105 | vfprintf (FILE *stream, const char *format, va_list args) | 107 | vfprintf (FILE *stream, const char *format, va_list args) |
| 106 | #undef vfprintf | 108 | #undef vfprintf |
