summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libalpm/log.c')
-rw-r--r--lib/libalpm/log.c19
1 files changed, 19 insertions, 0 deletions
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);