diff options
author | Andrew Gregory <andrew.gregory.8@gmail.com> | 2014-08-06 22:36:00 +0200 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2014-09-23 13:43:16 +0200 |
commit | c792262b137a5f2daddac22f82e7d8d98d0d7d31 (patch) | |
tree | d3177e6c722a96da72503a912d4c5fded0ef78e8 /lib/libalpm/util.c | |
parent | 9c066dff439ba453f4c362e1875b794cf3f362ed (diff) | |
download | pacman-c792262b137a5f2daddac22f82e7d8d98d0d7d31.tar.gz pacman-c792262b137a5f2daddac22f82e7d8d98d0d7d31.tar.xz |
wrap fgets to retry on EINTR
The read() underlying fgets() can be interrupted by a signal handler
causing fgets() to return NULL. Before we started handling SIGWINCH,
the odds of interrupting a read were low and typically resulted in
termination anyway. Replace all fgets calls with a wrapper that retries
in EINTR.
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Diffstat (limited to 'lib/libalpm/util.c')
-rw-r--r-- | lib/libalpm/util.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c index 6dab0de2..43d0d7be 100644 --- a/lib/libalpm/util.c +++ b/lib/libalpm/util.c @@ -576,8 +576,9 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[]) .type = ALPM_EVENT_SCRIPTLET_INFO, .line = line }; - if(fgets(line, PATH_MAX, pipe_file) == NULL) + if(safe_fgets(line, PATH_MAX, pipe_file) == NULL) { break; + } alpm_logaction(handle, "ALPM-SCRIPTLET", "%s", line); EVENT(handle, &event); } |