summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2007-11-04 23:38:59 +0100
committerDan McGee <dan@archlinux.org>2007-11-04 23:38:59 +0100
commit99f42d6bd2116b0bd8f75394fe92255ca1f4c80b (patch)
tree806ee6eed7631f8f31ee8dcba1848617307d0955 /lib
parent86ca39d15e02dff47b5b0f5bcd0494cf101ce0c1 (diff)
downloadpacman-99f42d6bd2116b0bd8f75394fe92255ca1f4c80b.tar.gz
pacman-99f42d6bd2116b0bd8f75394fe92255ca1f4c80b.tar.xz
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>
Diffstat (limited to 'lib')
-rw-r--r--lib/libalpm/handle.c29
-rw-r--r--lib/libalpm/log.c19
2 files changed, 25 insertions, 23 deletions
diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c
index 9031291d..af549498 100644
--- a/lib/libalpm/handle.c
+++ b/lib/libalpm/handle.c
@@ -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);
diff --git a/lib/libalpm/log.c b/lib/libalpm/log.c
index f4564fc9..dd9540ed 100644
--- a/lib/libalpm/log.c
+++ b/lib/libalpm/log.c
@@ -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);