diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libalpm/package.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c index 7317982c..084b9014 100644 --- a/lib/libalpm/package.c +++ b/lib/libalpm/package.c @@ -235,6 +235,8 @@ pmpkg_t *_alpm_pkg_load(char *pkgfile) register struct archive *archive; struct archive_entry *entry; pmpkg_t *info = NULL; + char *descfile = NULL; + int fd = -1; if(pkgfile == NULL || strlen(pkgfile) == 0) { RET_ERR(PM_ERR_WRONG_ARGS, NULL); @@ -261,9 +263,6 @@ pmpkg_t *_alpm_pkg_load(char *pkgfile) break; } if(!strcmp(archive_entry_pathname (entry), ".PKGINFO")) { - char *descfile; - int fd; - /* extract this file into /tmp. it has info for us */ descfile = strdup("/tmp/alpm_XXXXXX"); fd = mkstemp(descfile); @@ -351,9 +350,13 @@ pmpkg_t *_alpm_pkg_load(char *pkgfile) pkg_invalid: pm_errno = PM_ERR_PKG_INVALID; - unlink(descfile); - FREE(descfile); - close(fd); + if(descfile) { + unlink(descfile); + FREE(descfile); + } + if(fd != -1) { + close(fd); + } error: FREEPKG(info); archive_read_finish (archive); |