am c4f1cfc9: am a779719d: Merge "Add TEMP_FAILURE_RETRY to stdio\'s low-level read/write functions."

* commit 'c4f1cfc9fc5ba053525cd155d50fae8b67df0392':
  Add TEMP_FAILURE_RETRY to stdio's low-level read/write functions.
This commit is contained in:
Elliott Hughes 2015-01-21 02:21:58 +00:00 committed by Android Git Automerger
commit e574a70d1e
2 changed files with 7 additions and 6 deletions

View File

@ -61,6 +61,7 @@ libc_common_src_files := \
stdio/fread.c \ stdio/fread.c \
stdio/snprintf.c\ stdio/snprintf.c\
stdio/sprintf.c \ stdio/sprintf.c \
stdio/stdio.c \
stdio/stdio_ext.cpp \ stdio/stdio_ext.cpp \
# Fortify implementations of libc functions. # Fortify implementations of libc functions.
@ -450,7 +451,6 @@ libc_upstream_openbsd_src_files := \
upstream-openbsd/lib/libc/stdio/setbuffer.c \ upstream-openbsd/lib/libc/stdio/setbuffer.c \
upstream-openbsd/lib/libc/stdio/setvbuf.c \ upstream-openbsd/lib/libc/stdio/setvbuf.c \
upstream-openbsd/lib/libc/stdio/sscanf.c \ upstream-openbsd/lib/libc/stdio/sscanf.c \
upstream-openbsd/lib/libc/stdio/stdio.c \
upstream-openbsd/lib/libc/stdio/swprintf.c \ upstream-openbsd/lib/libc/stdio/swprintf.c \
upstream-openbsd/lib/libc/stdio/swscanf.c \ upstream-openbsd/lib/libc/stdio/swscanf.c \
upstream-openbsd/lib/libc/stdio/tempnam.c \ upstream-openbsd/lib/libc/stdio/tempnam.c \

View File

@ -31,6 +31,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <stdio.h> #include <stdio.h>
@ -46,7 +47,7 @@ __sread(void *cookie, char *buf, int n)
FILE *fp = cookie; FILE *fp = cookie;
int ret; int ret;
ret = read(fp->_file, buf, n); ret = TEMP_FAILURE_RETRY(read(fp->_file, buf, n));
/* if the read succeeded, update the current offset */ /* if the read succeeded, update the current offset */
if (ret >= 0) if (ret >= 0)
fp->_offset += ret; fp->_offset += ret;
@ -61,9 +62,9 @@ __swrite(void *cookie, const char *buf, int n)
FILE *fp = cookie; FILE *fp = cookie;
if (fp->_flags & __SAPP) if (fp->_flags & __SAPP)
(void) lseek(fp->_file, (off_t)0, SEEK_END); (void) TEMP_FAILURE_RETRY(lseek(fp->_file, (off_t)0, SEEK_END));
fp->_flags &= ~__SOFF; /* in case FAPPEND mode is set */ fp->_flags &= ~__SOFF; /* in case FAPPEND mode is set */
return (write(fp->_file, buf, n)); return TEMP_FAILURE_RETRY(write(fp->_file, buf, n));
} }
fpos_t fpos_t
@ -72,7 +73,7 @@ __sseek(void *cookie, fpos_t offset, int whence)
FILE *fp = cookie; FILE *fp = cookie;
off_t ret; off_t ret;
ret = lseek(fp->_file, (off_t)offset, whence); ret = TEMP_FAILURE_RETRY(lseek(fp->_file, (off_t)offset, whence));
if (ret == (off_t)-1) if (ret == (off_t)-1)
fp->_flags &= ~__SOFF; fp->_flags &= ~__SOFF;
else { else {
@ -85,5 +86,5 @@ __sseek(void *cookie, fpos_t offset, int whence)
int int
__sclose(void *cookie) __sclose(void *cookie)
{ {
return (close(((FILE *)cookie)->_file)); return TEMP_FAILURE_RETRY(close(((FILE *)cookie)->_file));
} }