summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/util.c
diff options
context:
space:
mode:
authorAndrew Gregory <andrew.gregory.8@gmail.com>2014-08-06 22:36:00 +0200
committerAllan McRae <allan@archlinux.org>2014-09-23 13:43:16 +0200
commitc792262b137a5f2daddac22f82e7d8d98d0d7d31 (patch)
treed3177e6c722a96da72503a912d4c5fded0ef78e8 /lib/libalpm/util.c
parent9c066dff439ba453f4c362e1875b794cf3f362ed (diff)
downloadpacman-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.c3
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);
}