summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/package.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libalpm/package.c')
-rw-r--r--lib/libalpm/package.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index 1b006cc4..ab654aee 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -246,7 +246,7 @@ pmpkg_t *_alpm_pkg_load(char *pkgfile)
int config = 0;
int filelist = 0;
int scriptcheck = 0;
- TAR *tar;
+ TAR *tar = NULL;
pmpkg_t *info = NULL;
tartype_t gztype = {
(openfunc_t)_alpm_gzopen_frontend,
@@ -259,21 +259,19 @@ pmpkg_t *_alpm_pkg_load(char *pkgfile)
RET_ERR(PM_ERR_WRONG_ARGS, NULL);
}
- if(tar_open(&tar, pkgfile, &gztype, O_RDONLY, 0, TAR_GNU) == -1) {
- RET_ERR(PM_ERR_NOT_A_FILE, NULL);
- }
-
info = _alpm_pkg_new(NULL, NULL);
if(info == NULL) {
- tar_close(tar);
return(NULL);
}
+ if(_alpm_pkg_splitname(pkgfile, info->name, info->version) == -1) {
+ pm_errno = PM_ERR_PKG_INVALID_NAME;
+ goto error;
+ }
- /* ORE
- * We should get the name and version information from the file name
- * by using pkg_splitname()
- */
-
+ if(tar_open(&tar, pkgfile, &gztype, O_RDONLY, 0, TAR_GNU) == -1) {
+ pm_errno = PM_ERR_NOT_A_FILE;
+ goto error;
+ }
for(i = 0; !th_read(tar); i++) {
if(config && filelist && scriptcheck) {
/* we have everything we need */
@@ -296,22 +294,6 @@ pmpkg_t *_alpm_pkg_load(char *pkgfile)
close(fd);
goto error;
}
- if(!strlen(info->name)) {
- _alpm_log(PM_LOG_ERROR, "missing package name in %s", pkgfile);
- pm_errno = PM_ERR_PKG_INVALID;
- unlink(descfile);
- FREE(descfile);
- close(fd);
- goto error;
- }
- if(!strlen(info->version)) {
- _alpm_log(PM_LOG_ERROR, "missing package version in %s", pkgfile);
- pm_errno = PM_ERR_PKG_INVALID;
- unlink(descfile);
- FREE(descfile);
- close(fd);
- goto error;
- }
config = 1;
unlink(descfile);
FREE(descfile);
@@ -368,6 +350,7 @@ pmpkg_t *_alpm_pkg_load(char *pkgfile)
expath = NULL;
}
tar_close(tar);
+ tar = NULL;
if(!config) {
_alpm_log(PM_LOG_ERROR, "missing package info file in %s", pkgfile);
@@ -383,8 +366,9 @@ pmpkg_t *_alpm_pkg_load(char *pkgfile)
error:
FREEPKG(info);
- tar_close(tar);
-
+ if(tar) {
+ tar_close(tar);
+ }
return(NULL);
}