bindtextdomain(PACKAGE_TARNAME, "/usr/share/locale");
textdomain(PACKAGE_TARNAME);
+ // Initialize the pakfire library
+ int r = pakfire_init();
+ if (r)
+ return NULL;
+
// Create the module
PyObject* module = PyModule_Create(&moduledef);
if (!module)
#ifndef PAKFIRE_LOGGING_H
#define PAKFIRE_LOGGING_H
+#include <syslog.h>
+
#include <pakfire/types.h>
-void pakfire_log_stderr(Pakfire pakfire, int priority, const char* file,
+void pakfire_log_stderr(int priority, const char* file,
int line, const char* fn, const char* format, va_list args);
-void pakfire_log_syslog(Pakfire pakfire, int priority, const char* file,
+void pakfire_log_syslog(int priority, const char* file,
int line, const char* fn, const char* format, va_list args);
+pakfire_log_function_t pakfire_log_get_function();
+void pakfire_log_set_function(pakfire_log_function_t func);
+int pakfire_log_get_priority();
+void pakfire_log_set_priority(int priority);
+
#ifdef PAKFIRE_PRIVATE
-void pakfire_log(Pakfire pakfire, int priority, const char *file,
+typedef struct pakfire_logging_config {
+ pakfire_log_function_t function;
+ int priority;
+} pakfire_logging_config_t;
+
+void pakfire_setup_logging();
+void pakfire_log(int priority, const char *file,
int line, const char *fn, const char *format, ...)
- __attribute__((format(printf, 6, 7)));
+ __attribute__((format(printf, 5, 6)));
// This function does absolutely nothing
-static inline void __attribute__((always_inline, format(printf, 2, 3)))
- pakfire_log_null(Pakfire pakfire, const char *format, ...) {}
+static inline void __attribute__((always_inline, format(printf, 1, 2)))
+ pakfire_log_null(const char *format, ...) {}
-#define pakfire_log_condition(pakfire, prio, arg...) \
+#define pakfire_log_condition(prio, arg...) \
do { \
- if (pakfire_get_log_priority(pakfire) >= prio) \
- pakfire_log(pakfire, prio, __FILE__, __LINE__, __FUNCTION__, ## arg); \
+ if (pakfire_log_get_priority() >= prio) \
+ pakfire_log(prio, __FILE__, __LINE__, __FUNCTION__, ## arg); \
} while (0)
-#define INFO(pakfire, arg...) pakfire_log_condition(pakfire, LOG_INFO, ## arg)
-#define ERROR(pakfire, arg...) pakfire_log_condition(pakfire, LOG_ERR, ## arg)
+#define INFO(arg...) pakfire_log_condition(LOG_INFO, ## arg)
+#define ERROR(arg...) pakfire_log_condition(LOG_ERR, ## arg)
#ifdef ENABLE_DEBUG
-# define DEBUG(pakfire, arg...) pakfire_log_condition(pakfire, LOG_DEBUG, ## arg)
+# define DEBUG(arg...) pakfire_log_condition(LOG_DEBUG, ## arg)
#else
-# define DEBUG(pakfire, arg...) pakfire_log_null(pakfire, ## arg)
+# define DEBUG pakfire_log_null
#endif
#endif /* PAKFIRE_PRIVATE */
#include <pakfire/logging.h>
#include <pakfire/types.h>
+int pakfire_init();
+
Pakfire pakfire_create(const char* path, const char* arch);
Pakfire pakfire_ref(Pakfire pakfire);
void pakfire_unref(Pakfire pakfire);
-pakfire_log_function_t pakfire_get_log_function(Pakfire pakfire);
-void pakfire_set_log_function(Pakfire pakfire, pakfire_log_function_t func);
-int pakfire_get_log_priority(Pakfire pakfire);
-void pakfire_set_log_priority(Pakfire pakfire, int priority);
-
const char* pakfire_get_path(Pakfire pakfire);
const char* pakfire_get_arch(Pakfire pakfire);
typedef struct _PakfireStep* PakfireStep;
typedef struct _PakfireTransaction* PakfireTransaction;
-typedef void (*pakfire_log_function_t)(Pakfire pakfire, int priority,
+typedef void (*pakfire_log_function_t)(int priority,
const char* file, int line, const char* fn,
const char* format, va_list args);
LIBPAKFIRE_0 {
global:
# pakfire
+ pakfire_init;
pakfire_create;
pakfire_get_arch;
- pakfire_get_log_function;
- pakfire_get_log_priority;
pakfire_get_path;
pakfire_get_pool;
pakfire_ref;
- pakfire_set_log_function;
- pakfire_set_log_priority;
pakfire_unref;
# archive
pakfire_key_ref;
pakfire_key_unref;
+ # log
+ pakfire_log_get_function;
+ pakfire_log_get_priority;
+ pakfire_log_set_function;
+ pakfire_log_set_priority;
+
# package
pakfire_package_add_conflicts;
pakfire_package_add_obsoletes;
# #
#############################################################################*/
+#include <ctype.h>
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include <syslog.h>
#include <pakfire/logging.h>
#include <pakfire/pakfire.h>
-void pakfire_log(Pakfire pakfire, int priority, const char* file, int line,
+static pakfire_logging_config_t conf = {
+ .function = pakfire_log_stderr,
+ .priority = LOG_ERR,
+};
+
+static int log_priority(const char* priority) {
+ char* end;
+
+ int prio = strtol(priority, &end, 10);
+ if (*end == '\0' || isspace(*end))
+ return prio;
+
+ if (strncmp(priority, "error", strlen("error")) == 0)
+ return LOG_ERR;
+
+ if (strncmp(priority, "info", strlen("info")) == 0)
+ return LOG_INFO;
+
+ if (strncmp(priority, "debug", strlen("debug")) == 0)
+ return LOG_DEBUG;
+
+ return 0;
+}
+
+void pakfire_setup_logging() {
+ const char* priority = secure_getenv("PAKFIRE_LOG");
+ if (priority)
+ pakfire_log_set_priority(log_priority(priority));
+}
+
+pakfire_log_function_t pakfire_log_get_function() {
+ return conf.function;
+}
+
+void pakfire_log_set_function(pakfire_log_function_t func) {
+ conf.function = func;
+}
+
+int pakfire_log_get_priority() {
+ return conf.priority;
+}
+
+void pakfire_log_set_priority(int priority) {
+ conf.priority = priority;
+}
+
+void pakfire_log(int priority, const char* file, int line,
const char* fn, const char* format, ...) {
va_list args;
- pakfire_log_function_t log_function = pakfire_get_log_function(pakfire);
-
// Save errno
int saved_errno = errno;
va_start(args, format);
- log_function(pakfire, priority, file, line, fn, format, args);
+ conf.function(priority, file, line, fn, format, args);
va_end(args);
// Restore errno
errno = saved_errno;
}
-void pakfire_log_stderr(Pakfire pakfire, int priority, const char* file,
+void pakfire_log_stderr(int priority, const char* file,
int line, const char* fn, const char* format, va_list args) {
fprintf(stderr, "pakfire: %s: ", fn);
vfprintf(stderr, format, args);
}
-void pakfire_log_syslog(Pakfire pakfire, int priority, const char* file,
+void pakfire_log_syslog(int priority, const char* file,
int line, const char* fn, const char* format, va_list args) {
openlog("pakfire", LOG_PID, LOG_DAEMON);
vsyslog(priority | LOG_DAEMON, format, args);
# #
#############################################################################*/
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-
#include <pakfire/pakfire.h>
#include <pakfire/pool.h>
#include <pakfire/system.h>
#include <pakfire/types.h>
#include <pakfire/util.h>
-static int log_priority(const char* priority) {
- char* end;
-
- int prio = strtol(priority, &end, 10);
- if (*end == '\0' || isspace(*end))
- return prio;
-
- if (strncmp(priority, "error", strlen("error")) == 0)
- return LOG_ERR;
-
- if (strncmp(priority, "info", strlen("info")) == 0)
- return LOG_INFO;
-
- if (strncmp(priority, "debug", strlen("debug")) == 0)
- return LOG_DEBUG;
+int pakfire_init() {
+ // Setup logging
+ pakfire_setup_logging();
return 0;
}
}
pakfire->arch = pakfire_strdup(arch);
- // Setup logging
- pakfire->log_function = pakfire_log_syslog;
- pakfire->log_priority = LOG_ERR;
-
- const char* priority = secure_getenv("PAKFIRE_LOG");
- if (priority)
- pakfire_set_log_priority(pakfire, log_priority(priority));
-
- DEBUG(pakfire, "Pakfire initialized at %p\n", pakfire);
- DEBUG(pakfire, " arch = %s\n", pakfire->arch);
- DEBUG(pakfire, " path = %s\n", pakfire->path);
+ DEBUG("Pakfire initialized at %p\n", pakfire);
+ DEBUG(" arch = %s\n", pakfire->arch);
+ DEBUG(" path = %s\n", pakfire->path);
// Initialize the pool
pakfire->pool = pakfire_pool_create(pakfire);
pakfire_free(pakfire->path);
pakfire_free(pakfire->arch);
- DEBUG(pakfire, "Pakfire released at %p\n", pakfire);
+ DEBUG("Pakfire released at %p\n", pakfire);
pakfire_free(pakfire);
}
-pakfire_log_function_t pakfire_get_log_function(Pakfire pakfire) {
- return pakfire->log_function;
-}
-
-void pakfire_set_log_function(Pakfire pakfire, pakfire_log_function_t func) {
- pakfire->log_function = func;
-}
-
-int pakfire_get_log_priority(Pakfire pakfire) {
- return pakfire->log_priority;
-}
-
-void pakfire_set_log_priority(Pakfire pakfire, int priority) {
- pakfire->log_priority = priority;
-}
-
const char* pakfire_get_path(Pakfire pakfire) {
return pakfire->path;
}