summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/util.c
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2010-06-27 13:13:01 +0200
committerDan McGee <dan@archlinux.org>2010-07-01 06:49:48 +0200
commit41724cbcdef11cb00fcd720c75d399288ea41fd0 (patch)
treec55ca577292793d9774d661f5fb8339b69f14c49 /lib/libalpm/util.c
parent96a1255eadd8b1faaffbfc2e9bdb1aa5e46ee04c (diff)
downloadpacman-41724cbcdef11cb00fcd720c75d399288ea41fd0.tar.gz
pacman-41724cbcdef11cb00fcd720c75d399288ea41fd0.tar.xz
Check return value of fwrite when copying files
Check that writing to destination file actually occurs in _alpm_copyfile. Required adding a new error (PM_ERR_WRITE) as none of the others appeared appropriate. Prevents compiler warning when using -D_FORTIFY_SOURCE=2. Signed-off-by: Allan McRae <allan@archlinux.org> Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib/libalpm/util.c')
-rw-r--r--lib/libalpm/util.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index b033e0a3..fd5bb628 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -143,7 +143,15 @@ int _alpm_copyfile(const char *src, const char *dest)
/* do the actual file copy */
while((len = fread(buf, 1, CPBUFSIZE, in))) {
- fwrite(buf, 1, len, out);
+ size_t nwritten = 0;
+ nwritten = fwrite(buf, 1, len, out);
+ if((nwritten != len) || ferror(out)) {
+ pm_errno = PM_ERR_WRITE;
+ _alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
+ dest, strerror(errno));
+ ret = -1;
+ goto cleanup;
+ }
}
/* chmod dest to permissions of src, as long as it is not a symlink */