diff options
author | Aaron Griffin <aaron@archlinux.org> | 2007-03-21 04:08:19 +0100 |
---|---|---|
committer | Aaron Griffin <aaron@archlinux.org> | 2007-03-21 04:08:19 +0100 |
commit | 941c23025c886b820af8a17959bdf6dc4c2c0c9a (patch) | |
tree | d5e044e916ba3cf63fd8d8279cb9517db34822a9 /lib/libalpm/server.c | |
parent | 8ded2051d2449045ad07117d7ac58a17784d20ef (diff) | |
download | pacman-941c23025c886b820af8a17959bdf6dc4c2c0c9a.tar.gz pacman-941c23025c886b820af8a17959bdf6dc4c2c0c9a.tar.xz |
* Fix asking the user to upgrade when using -Sp
* More significant error messages when -Qo fails
* Potential fix for reported error that pacman indicates corrupt packages
when space is full on the cache dir
Diffstat (limited to 'lib/libalpm/server.c')
-rw-r--r-- | lib/libalpm/server.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/lib/libalpm/server.c b/lib/libalpm/server.c index 80b264a2..27038946 100644 --- a/lib/libalpm/server.c +++ b/lib/libalpm/server.c @@ -29,6 +29,7 @@ #include <sys/stat.h> #include <unistd.h> #include <time.h> +#include <errno.h> #include <download.h> /* libalpm */ @@ -290,6 +291,9 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath, localf = fopen(output, "w"); if(localf == NULL) { /* still null? */ _alpm_log(PM_LOG_ERROR, _("cannot write to file '%s'"), output); + if(dlf != NULL) { + fclose(dlf); + } return -1; } } @@ -300,8 +304,29 @@ int _alpm_downloadfiles_forreal(alpm_list_t *servers, const char *localpath, int nread = 0; char buffer[PM_DLBUF_LEN]; while((nread = fread(buffer, 1, PM_DLBUF_LEN, dlf)) > 0) { + if(ferror(dlf)) { + _alpm_log(PM_LOG_ERROR, _("error downloading '%s': %s"), + fn, downloadLastErrString); + fclose(localf); + fclose(dlf); + return(-1); + } + int nwritten = 0; - while((nwritten += fwrite(buffer, 1, (nread - nwritten), localf)) < nread) ; + while(nwritten < nread) { + nwritten += fwrite(buffer, 1, (nread - nwritten), localf); + if(ferror(localf)) { + _alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s"), + realfile, strerror(errno)); + fclose(localf); + fclose(dlf); + return(-1); + } + } + + if(nwritten != nread) { + + } dltotal_bytes += nread; if(handle->dlcb) handle->dlcb(pkgname, dltotal_bytes, ust.size); |