1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-12-22 15:58:50 -05:00

libalpm: open the logstream on demand

Don't open a stream to the logfile until necessary. This will allow us
to catch any errors in opening the logfile instead of ignorning them.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2007-11-04 16:38:59 -06:00
parent 86ca39d15e
commit 99f42d6bd2
2 changed files with 25 additions and 23 deletions

View File

@ -50,6 +50,8 @@ pmhandle_t *_alpm_handle_new()
{
pmhandle_t *handle;
ALPM_LOG_FUNC;
CALLOC(handle, 1, sizeof(pmhandle_t), RET_ERR(PM_ERR_MEMORY, NULL));
handle->lckfd = -1;
@ -388,7 +390,6 @@ void SYMEXPORT alpm_option_set_cachedirs(alpm_list_t *cachedirs)
int SYMEXPORT alpm_option_set_logfile(const char *logfile)
{
char *oldlogfile = handle->logfile;
FILE *oldlogstream = handle->logstream;
ALPM_LOG_FUNC;
@ -398,32 +399,14 @@ int SYMEXPORT alpm_option_set_logfile(const char *logfile)
}
handle->logfile = strdup(logfile);
handle->logstream = fopen(logfile, "a");
if(handle->logstream == NULL) {
/* TODO we probably want to do this at some point, but right now
* it just blows up when a user calls pacman without privilages */
_alpm_log(PM_LOG_DEBUG, "couldn't open logfile for writing, ignoring\n");
/*
if(errno == EACCES) {
pm_errno = PM_ERR_BADPERMS;
} else if(errno == ENOENT) {
pm_errno = PM_ERR_NOT_A_DIR;
} else {
pm_errno = PM_ERR_SYSTEM;
}
* reset logfile to its previous value *
FREE(handle->logfile);
handle->logfile = oldlogfile;
handle->logstream = oldlogstream;
return(-1);
*/
}
/* free the old logfile path string, and close the stream so logaction
* will reopen a new stream on the new logfile */
if(oldlogfile) {
FREE(oldlogfile);
}
if(oldlogstream) {
fclose(oldlogstream);
if(handle->logstream) {
fclose(handle->logstream);
}
_alpm_log(PM_LOG_DEBUG, "option 'logfile' = %s\n", handle->logfile);
return(0);

View File

@ -23,6 +23,9 @@
#include <stdio.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <time.h>
/* libalpm */
@ -51,6 +54,22 @@ int SYMEXPORT alpm_logaction(char *fmt, ...)
/* Sanity checks */
ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -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) {
pm_errno = PM_ERR_BADPERMS;
} else if(errno == ENOENT) {
pm_errno = PM_ERR_NOT_A_DIR;
} else {
pm_errno = PM_ERR_SYSTEM;
}
return(-1);
}
}
va_start(args, fmt);
ret = _alpm_logaction(handle->usesyslog, handle->logstream, fmt, args);
va_end(args);