/*
Convenience macro to call the logger callback
*/
-#define pakfire_build_log(build, priority, r, file, line, function, format, arg...) \
- build->callbacks.log(build, build->callbacks.log_data, \
- priority, r, file, line, function, format, ## arg)
+static int pakfire_build_log(struct pakfire_build* build, int priority, int error,
+ const char* file, int line, const char* function, const char* format, ...) {
+ char* buffer = NULL;
+ va_list args;
+ int r;
+
+ // Don't log messages of a lower loglevel
+ if (pakfire_log_get_priority(build->pakfire) < priority)
+ return 0;
+
+ // Format message
+ va_start(args, format);
+ r = vasprintf(&buffer, format, args);
+ va_end(args);
+
+ // Fail if we could not format the message
+ if (r < 0)
+ return r;
+
+ // Send everything to the parent logger
+ pakfire_log(build->pakfire, priority, error, file, line, function, "%s", buffer);
+
+ // Call the build logger callback
+ if (build->callbacks.log)
+ r = build->callbacks.log(build, build->callbacks.log_data, priority, error,
+ file, line, function, "%s", buffer);
+ else
+ r = 0;
+
+ // Cleanup
+ if (buffer)
+ free(buffer);
+
+ return r;
+}
#define BUILD_LOG_ERRNO(build, priority, r, arg...) \
pakfire_build_log(build, priority, r, __FILE__, __LINE__, __FUNCTION__, ## arg)
return r;
}
-static int pakfire_build_default_log_callback(struct pakfire_build* build, void* data,
- int priority, int error, const char* file, int line, const char* function, const char* format, ...) {
- char* buffer = NULL;
- va_list args;
- int r;
-
- // Only pass messages to the pakfire logger that are wanted
- if (pakfire_log_get_priority(build->pakfire) < priority)
- return 0;
-
- // Format the message
- va_start(args, format);
- r = vasprintf(&buffer, format, args);
- va_end(args);
-
- // Fail if we could not format the string
- if (r < 0)
- return r;
-
- // Send the message to the upstream logger
- pakfire_log(build->pakfire, priority, error, file, line, function, "%s", buffer);
-
- // Cleanup
- if (buffer)
- free(buffer);
-
- return 0;
-}
-
static int pakfire_build_jail_log_callback(struct pakfire* pakfire,
void* data, int priority, const char* line, size_t length) {
struct pakfire_build* build = data;
// Copy flags
b->flags = flags;
- // Set default log callback
- b->callbacks.log = pakfire_build_default_log_callback;
-
// Store start time
r = pakfire_build_set_time_start(b);
if (r)