Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com> --- lib/libalpm/add.c | 22 +++++++++++----------- lib/libalpm/alpm.h | 1 + lib/libalpm/log.c | 37 +++++++++++++++++++++++++++++++++++++ lib/libalpm/remove.c | 6 +++--- lib/libalpm/util.c | 2 +- 5 files changed, 53 insertions(+), 15 deletions(-) diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c index 7ef6530..86f4c64 100644 --- a/lib/libalpm/add.c +++ b/lib/libalpm/add.c @@ -121,7 +121,7 @@ static int perform_extraction(alpm_handle_t *handle, struct archive *archive, } else if(ret != ARCHIVE_OK) { _alpm_log(handle, ALPM_LOG_ERROR, _("could not extract %s (%s)\n"), origname, archive_error_string(archive)); - alpm_logaction(handle, "error: could not extract %s (%s)\n", + alpm_plogaction(handle, "ALPM", "error: could not extract %s (%s)\n", origname, archive_error_string(archive)); return 1; } @@ -133,7 +133,7 @@ static int try_rename(alpm_handle_t *handle, const char *src, const char *dest) if(rename(src, dest)) { _alpm_log(handle, ALPM_LOG_ERROR, _("could not rename %s to %s (%s)\n"), src, dest, strerror(errno)); - alpm_logaction(handle, "error: could not rename %s to %s (%s)\n", + alpm_plogaction(handle, "ALPM", "error: could not rename %s to %s (%s)\n", src, dest, strerror(errno)); return 1; } @@ -184,7 +184,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive, if(alpm_list_find(handle->noextract, entryname, _alpm_fnmatch)) { _alpm_log(handle, ALPM_LOG_DEBUG, "%s is in NoExtract, skipping extraction\n", entryname); - alpm_logaction(handle, "note: %s is in NoExtract, skipping extraction\n", + alpm_plogaction(handle, "ALPM", "note: %s is in NoExtract, skipping extraction\n", entryname); archive_read_data_skip(archive); return 0; @@ -224,7 +224,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive, _alpm_log(handle, ALPM_LOG_WARNING, _("directory permissions differ on %s\n" "filesystem: %o package: %o\n"), entryname, lsbuf.st_mode & mask, entrymode & mask); - alpm_logaction(handle, "warning: directory permissions differ on %s\n" + alpm_plogaction(handle, "ALPM", "warning: directory permissions differ on %s\n" "filesystem: %o package: %o\n", entryname, lsbuf.st_mode & mask, entrymode & mask); } @@ -348,7 +348,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive, errors++; } else { _alpm_log(handle, ALPM_LOG_WARNING, _("%s saved as %s\n"), filename, newpath); - alpm_logaction(handle, "warning: %s saved as %s\n", filename, newpath); + alpm_plogaction(handle, "ALPM", "warning: %s saved as %s\n", filename, newpath); } } free(newpath); @@ -399,7 +399,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive, } else { _alpm_log(handle, ALPM_LOG_WARNING, _("%s installed as %s\n"), filename, newpath); - alpm_logaction(handle, "warning: %s installed as %s\n", + alpm_plogaction(handle, "ALPM", "warning: %s installed as %s\n", filename, newpath); } free(newpath); @@ -416,7 +416,7 @@ needbackup_cleanup: /* change the path to a .pacnew extension */ _alpm_log(handle, ALPM_LOG_DEBUG, "%s is in NoUpgrade -- skipping\n", filename); _alpm_log(handle, ALPM_LOG_WARNING, _("extracting %s as %s.pacnew\n"), filename, filename); - alpm_logaction(handle, "warning: extracting %s as %s.pacnew\n", filename, filename); + alpm_plogaction(handle, "ALPM", "warning: extracting %s as %s.pacnew\n", filename, filename); strncat(filename, ".pacnew", PATH_MAX - strlen(filename)); } else { _alpm_log(handle, ALPM_LOG_DEBUG, "extracting %s\n", filename); @@ -518,7 +518,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg, /* prepare directory for database entries so permission are correct after changelog/install script installation (FS#12263) */ if(_alpm_local_db_prepare(db, newpkg)) { - alpm_logaction(handle, "error: could not create database entry %s-%s\n", + alpm_plogaction(handle, "ALPM", "error: could not create database entry %s-%s\n", newpkg->name, newpkg->version); handle->pm_errno = ALPM_ERR_DB_WRITE; ret = -1; @@ -609,12 +609,12 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg, if(is_upgrade) { _alpm_log(handle, ALPM_LOG_ERROR, _("problem occurred while upgrading %s\n"), newpkg->name); - alpm_logaction(handle, "error: problem occurred while upgrading %s\n", + alpm_plogaction(handle, "ALPM", "error: problem occurred while upgrading %s\n", newpkg->name); } else { _alpm_log(handle, ALPM_LOG_ERROR, _("problem occurred while installing %s\n"), newpkg->name); - alpm_logaction(handle, "error: problem occurred while installing %s\n", + alpm_plogaction(handle, "ALPM", "error: problem occurred while installing %s\n", newpkg->name); } } @@ -629,7 +629,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg, if(_alpm_local_db_write(db, newpkg, INFRQ_ALL)) { _alpm_log(handle, ALPM_LOG_ERROR, _("could not update database entry %s-%s\n"), newpkg->name, newpkg->version); - alpm_logaction(handle, "error: could not update database entry %s-%s\n", + alpm_plogaction(handle, "ALPM", "error: could not update database entry %s-%s\n", newpkg->name, newpkg->version); handle->pm_errno = ALPM_ERR_DB_WRITE; ret = -1; diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index 3388735..bece1e2 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -272,6 +272,7 @@ typedef enum _alpm_loglevel_t { typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list); int alpm_logaction(alpm_handle_t *handle, const char *fmt, ...); +int alpm_plogaction(alpm_handle_t *handle, const char *prefix, const char *fmt, ...); /** * Events. diff --git a/lib/libalpm/log.c b/lib/libalpm/log.c index 0b48d26..4119b5d 100644 --- a/lib/libalpm/log.c +++ b/lib/libalpm/log.c @@ -35,6 +35,43 @@ /** A printf-like function for logging. * @param handle the context handle + * @param prefix log message prefix + * @param fmt output format + * @return 0 on success, -1 on error (pm_errno is set accordingly) + */ +int SYMEXPORT alpm_plogaction(alpm_handle_t *handle, const char *prefix, + const char *fmt, ...) +{ + int ret; + va_list args; + + ASSERT(handle != NULL, return -1); + + /* check if the logstream is open already, opening it if needed */ + if(handle->logstream == NULL) { + handle->logstream = fopen(handle->logfile, "a"); + /* if we couldn't open it, we have an issue */ + if(handle->logstream == NULL) { + if(errno == EACCES) { + handle->pm_errno = ALPM_ERR_BADPERMS; + } else if(errno == ENOENT) { + handle->pm_errno = ALPM_ERR_NOT_A_DIR; + } else { + handle->pm_errno = ALPM_ERR_SYSTEM; + } + return -1; + } + } + + va_start(args, fmt); + ret = _alpm_logaction(handle, prefix, fmt, args); + va_end(args); + + return ret; +} + +/** A printf-like function for logging. + * @param handle the context handle * @param fmt output format * @return 0 on success, -1 on error (pm_errno is set accordingly) */ diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c index 4e1c127..f47b377 100644 --- a/lib/libalpm/remove.c +++ b/lib/libalpm/remove.c @@ -479,13 +479,13 @@ static int unlink_file(alpm_handle_t *handle, alpm_pkg_t *oldpkg, if(rename(file, newpath)) { _alpm_log(handle, ALPM_LOG_ERROR, _("could not rename %s to %s (%s)\n"), file, newpath, strerror(errno)); - alpm_logaction(handle, "error: could not rename %s to %s (%s)\n", + alpm_plogaction(handle, "ALPM", "error: could not rename %s to %s (%s)\n", file, newpath, strerror(errno)); free(newpath); return -1; } _alpm_log(handle, ALPM_LOG_WARNING, _("%s saved as %s\n"), file, newpath); - alpm_logaction(handle, "warning: %s saved as %s\n", file, newpath); + alpm_plogaction(handle, "ALPM", "warning: %s saved as %s\n", file, newpath); free(newpath); return 0; } @@ -497,7 +497,7 @@ static int unlink_file(alpm_handle_t *handle, alpm_pkg_t *oldpkg, if(unlink(file) == -1) { _alpm_log(handle, ALPM_LOG_ERROR, _("cannot remove %s (%s)\n"), file, strerror(errno)); - alpm_logaction(handle, "error: cannot remove %s (%s)\n", + alpm_plogaction(handle, "ALPM", "error: cannot remove %s (%s)\n", file, strerror(errno)); return -1; } diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c index 8a6f27c..cb90a07 100644 --- a/lib/libalpm/util.c +++ b/lib/libalpm/util.c @@ -572,7 +572,7 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[]) char line[PATH_MAX]; if(fgets(line, PATH_MAX, pipe_file) == NULL) break; - alpm_logaction(handle, "%s", line); + alpm_plogaction(handle, "ALPM-SCRIPTLET", "%s", line); EVENT(handle, ALPM_EVENT_SCRIPTLET_INFO, line, NULL); } fclose(pipe_file); -- 1.8.0.2