[pacman-dev] [PATCH 2/2] Set pm_errno on libarchive errors while reading
Dan McGee
dpmcgee at gmail.com
Mon Sep 27 11:54:07 EDT 2010
On Sun, Sep 12, 2010 at 9:01 AM, Sebastian Nowicki <sebnow at gmail.com> wrote:
> Signed-off-by: Sebastian Nowicki <sebnow at gmail.com>
Looks good, thanks!
> ---
> lib/libalpm/package.c | 16 +++++++++++++---
> 1 files changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
> index 0060300..717d32c 100644
> --- a/lib/libalpm/package.c
> +++ b/lib/libalpm/package.c
> @@ -488,12 +488,15 @@ void SYMEXPORT *alpm_pkg_changelog_open(pmpkg_t *pkg)
>
> /**
> * Read data from an open changelog 'file stream'. Similar to fread in
> - * functionality, this function takes a buffer and amount of data to read.
> + * functionality, this function takes a buffer and amount of data to read. If an
> + * error occurs pm_errno will be set.
> + *
> * @param ptr a buffer to fill with raw changelog data
> * @param size the size of the buffer
> * @param pkg the package that the changelog is being read from
> * @param fp a 'file stream' to the package changelog
> - * @return the number of characters read, or 0 if there is no more data
> + * @return the number of characters read, or 0 if there is no more data or an
> + * error occurred.
> */
> size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,
> const pmpkg_t *pkg, const void *fp)
> @@ -502,7 +505,14 @@ size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,
> if(pkg->origin == PKG_FROM_CACHE) {
> ret = fread(ptr, 1, size, (FILE*)fp);
> } else if(pkg->origin == PKG_FROM_FILE) {
> - ret = archive_read_data((struct archive*)fp, ptr, size);
> + ssize_t sret = archive_read_data((struct archive*)fp, ptr, size);
> + /* Report error (negative values) */
> + if(sret < 0) {
> + pm_errno = PM_ERR_LIBARCHIVE;
> + ret = 0;
> + } else {
> + ret = (size_t)sret;
> + }
> }
> return(ret);
> }
> --
> 1.7.2.2
>
>
>
More information about the pacman-dev
mailing list