From 39b0ac43fcbe35897f616a8e202ae9f3bcb1ee5c Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 28 Sep 2011 04:43:23 -0500 Subject: Revamp scriptlet path formation for scriptlets in local database Expose the current static get_pkgpath() function internally to the rest of the library as _alpm_local_db_pkgpath(). This allows use of this convenience function in add.c and remove.c when forming the path to the scriptlet location. Signed-off-by: Dan McGee --- lib/libalpm/add.c | 8 +++----- lib/libalpm/be_local.c | 19 ++++++++++--------- lib/libalpm/db.h | 1 + lib/libalpm/remove.c | 10 ++++++---- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c index 33b85c0b..653d2bd9 100644 --- a/lib/libalpm/add.c +++ b/lib/libalpm/add.c @@ -650,14 +650,12 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg, /* run the post-install script if it exists */ if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & ALPM_TRANS_FLAG_NOSCRIPTLET)) { - char scriptlet[PATH_MAX]; - const char *scriptlet_name; - snprintf(scriptlet, PATH_MAX, "%s%s-%s/install", - _alpm_db_path(db), newpkg->name, newpkg->version); - scriptlet_name = is_upgrade ? "post_upgrade" : "post_install"; + char *scriptlet = _alpm_local_db_pkgpath(db, newpkg, "install"); + const char *scriptlet_name = is_upgrade ? "post_upgrade" : "post_install"; _alpm_runscriptlet(handle, scriptlet, scriptlet_name, newpkg->version, oldpkg ? oldpkg->version : NULL, 0); + free(scriptlet); } if(is_upgrade) { diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c index 109aaaf2..88ecec0c 100644 --- a/lib/libalpm/be_local.c +++ b/lib/libalpm/be_local.c @@ -475,7 +475,7 @@ static int local_db_populate(alpm_db_t *db) } /* Note: the return value must be freed by the caller */ -static char *get_pkgpath(alpm_db_t *db, alpm_pkg_t *info, const char *filename) +char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info, const char *filename) { size_t len; char *pkgpath; @@ -544,7 +544,7 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t inforeq) _alpm_log(db->handle, ALPM_LOG_FUNCTION, "loading package data for %s : level=0x%x\n", info->name, inforeq); - pkgpath = get_pkgpath(db, info, NULL); + pkgpath = _alpm_local_db_pkgpath(db, info, NULL); if(!pkgpath || access(pkgpath, F_OK)) { /* directory doesn't exist or can't be opened */ _alpm_log(db->handle, ALPM_LOG_DEBUG, "cannot find '%s-%s' in db '%s'\n", @@ -558,7 +558,7 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t inforeq) /* DESC */ if(inforeq & INFRQ_DESC && !(info->infolevel & INFRQ_DESC)) { - char *path = get_pkgpath(db, info, "desc"); + char *path = _alpm_local_db_pkgpath(db, info, "desc"); if(!path || (fp = fopen(path, "r")) == NULL) { _alpm_log(db->handle, ALPM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno)); free(path); @@ -628,7 +628,7 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t inforeq) /* FILES */ if(inforeq & INFRQ_FILES && !(info->infolevel & INFRQ_FILES)) { - char *path = get_pkgpath(db, info, "files"); + char *path = _alpm_local_db_pkgpath(db, info, "files"); if(!path || (fp = fopen(path, "r")) == NULL) { _alpm_log(db->handle, ALPM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno)); free(path); @@ -685,7 +685,7 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t inforeq) /* INSTALL */ if(inforeq & INFRQ_SCRIPTLET && !(info->infolevel & INFRQ_SCRIPTLET)) { - char *path = get_pkgpath(db, info, "install"); + char *path = _alpm_local_db_pkgpath(db, info, "install"); if(access(path, F_OK) == 0) { info->scriptlet = 1; } @@ -714,7 +714,7 @@ int _alpm_local_db_prepare(alpm_db_t *db, alpm_pkg_t *info) } oldmask = umask(0000); - pkgpath = get_pkgpath(db, info, NULL); + pkgpath = _alpm_local_db_pkgpath(db, info, NULL); if((retval = mkdir(pkgpath, 0755)) != 0) { _alpm_log(db->handle, ALPM_LOG_ERROR, _("could not create directory %s: %s\n"), @@ -746,7 +746,7 @@ int _alpm_local_db_write(alpm_db_t *db, alpm_pkg_t *info, alpm_dbinfrq_t inforeq char *path; _alpm_log(db->handle, ALPM_LOG_DEBUG, "writing %s-%s DESC information back to db\n", info->name, info->version); - path = get_pkgpath(db, info, "desc"); + path = _alpm_local_db_pkgpath(db, info, "desc"); if(!path || (fp = fopen(path, "w")) == NULL) { _alpm_log(db->handle, ALPM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno)); @@ -857,7 +857,7 @@ int _alpm_local_db_write(alpm_db_t *db, alpm_pkg_t *info, alpm_dbinfrq_t inforeq char *path; _alpm_log(db->handle, ALPM_LOG_DEBUG, "writing %s-%s FILES information back to db\n", info->name, info->version); - path = get_pkgpath(db, info, "files"); + path = _alpm_local_db_pkgpath(db, info, "files"); if(!path || (fp = fopen(path, "w")) == NULL) { _alpm_log(db->handle, ALPM_LOG_ERROR, _("could not open file %s: %s\n"), path, strerror(errno)); @@ -903,8 +903,9 @@ cleanup: int _alpm_local_db_remove(alpm_db_t *db, alpm_pkg_t *info) { int ret = 0; - char *pkgpath = get_pkgpath(db, info, NULL); + char *pkgpath = _alpm_local_db_pkgpath(db, info, NULL); + /* TODO explicit file removes and then an rmdir? */ ret = _alpm_rmrf(pkgpath); free(pkgpath); if(ret != 0) { diff --git a/lib/libalpm/db.h b/lib/libalpm/db.h index 88f6c686..224bfbeb 100644 --- a/lib/libalpm/db.h +++ b/lib/libalpm/db.h @@ -93,6 +93,7 @@ void _alpm_db_unregister(alpm_db_t *db); int _alpm_local_db_prepare(alpm_db_t *db, alpm_pkg_t *info); int _alpm_local_db_write(alpm_db_t *db, alpm_pkg_t *info, alpm_dbinfrq_t inforeq); int _alpm_local_db_remove(alpm_db_t *db, alpm_pkg_t *info); +char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info, const char *filename); /* cache bullshit */ /* packages */ diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c index 7f917faa..44f3ee93 100644 --- a/lib/libalpm/remove.c +++ b/lib/libalpm/remove.c @@ -359,7 +359,6 @@ int _alpm_remove_single_package(alpm_handle_t *handle, const char *pkgname = oldpkg->name; const char *pkgver = oldpkg->version; alpm_filelist_t *filelist; - char scriptlet[PATH_MAX]; size_t i; if(newpkg) { @@ -370,13 +369,13 @@ int _alpm_remove_single_package(alpm_handle_t *handle, _alpm_log(handle, ALPM_LOG_DEBUG, "removing package %s-%s\n", pkgname, pkgver); - snprintf(scriptlet, PATH_MAX, "%s%s-%s/install", - _alpm_db_path(handle->db_local), pkgname, pkgver); - /* run the pre-remove scriptlet if it exists */ if(alpm_pkg_has_scriptlet(oldpkg) && !(handle->trans->flags & ALPM_TRANS_FLAG_NOSCRIPTLET)) { + char *scriptlet = _alpm_local_db_pkgpath(handle->db_local, + oldpkg, "install"); _alpm_runscriptlet(handle, scriptlet, "pre_remove", pkgver, NULL, 0); + free(scriptlet); } } @@ -453,7 +452,10 @@ int _alpm_remove_single_package(alpm_handle_t *handle, /* run the post-remove script if it exists */ if(alpm_pkg_has_scriptlet(oldpkg) && !(handle->trans->flags & ALPM_TRANS_FLAG_NOSCRIPTLET)) { + char *scriptlet = _alpm_local_db_pkgpath(handle->db_local, + oldpkg, "install"); _alpm_runscriptlet(handle, scriptlet, "post_remove", pkgver, NULL, 0); + free(scriptlet); } } -- cgit v1.2.3-24-g4f1b