pass client and user data to error handler (#100)

pull/109/head
Graham Ollis 2016-12-13 13:03:59 -05:00 committed by William Pitcock
parent e6c49153ff
commit fa87608978
4 changed files with 19 additions and 11 deletions

View File

@ -38,11 +38,13 @@
* *
* :param pkgconf_client_t* client: The client to initialise. * :param pkgconf_client_t* client: The client to initialise.
* :param pkgconf_error_handler_func_t error_handler: An optional error handler to use for logging errors. * :param pkgconf_error_handler_func_t error_handler: An optional error handler to use for logging errors.
* :param void * error_handler_data: user data passed to optional error handler
* :return: nothing * :return: nothing
*/ */
void void
pkgconf_client_init(pkgconf_client_t *client, pkgconf_error_handler_func_t error_handler) pkgconf_client_init(pkgconf_client_t *client, pkgconf_error_handler_func_t error_handler, void *error_handler_data)
{ {
client->error_handler_data = error_handler_data;
client->error_handler = error_handler; client->error_handler = error_handler;
client->auditf = NULL; client->auditf = NULL;
@ -58,14 +60,15 @@ pkgconf_client_init(pkgconf_client_t *client, pkgconf_error_handler_func_t error
* Allocate and initialise a pkgconf client object. * Allocate and initialise a pkgconf client object.
* *
* :param pkgconf_error_handler_func_t error_handler: An optional error handler to use for logging errors. * :param pkgconf_error_handler_func_t error_handler: An optional error handler to use for logging errors.
* :param void * error_handler_data: user data passed to optional error handler
* :return: A pkgconf client object. * :return: A pkgconf client object.
* :rtype: pkgconf_client_t* * :rtype: pkgconf_client_t*
*/ */
pkgconf_client_t * pkgconf_client_t *
pkgconf_client_new(pkgconf_error_handler_func_t error_handler) pkgconf_client_new(pkgconf_error_handler_func_t error_handler, void *error_handler_data)
{ {
pkgconf_client_t *out = calloc(sizeof(pkgconf_client_t), 1); pkgconf_client_t *out = calloc(sizeof(pkgconf_client_t), 1);
pkgconf_client_init(out, error_handler); pkgconf_client_init(out, error_handler, error_handler_data);
return out; return out;
} }

View File

@ -131,7 +131,7 @@ struct pkgconf_pkg_ {
typedef bool (*pkgconf_pkg_iteration_func_t)(const pkgconf_pkg_t *pkg, void *data); typedef bool (*pkgconf_pkg_iteration_func_t)(const pkgconf_pkg_t *pkg, void *data);
typedef void (*pkgconf_pkg_traverse_func_t)(pkgconf_client_t *client, pkgconf_pkg_t *pkg, void *data, unsigned int flags); typedef void (*pkgconf_pkg_traverse_func_t)(pkgconf_client_t *client, pkgconf_pkg_t *pkg, void *data, unsigned int flags);
typedef bool (*pkgconf_queue_apply_func_t)(pkgconf_client_t *client, pkgconf_pkg_t *world, void *data, int maxdepth, unsigned int flags); typedef bool (*pkgconf_queue_apply_func_t)(pkgconf_client_t *client, pkgconf_pkg_t *world, void *data, int maxdepth, unsigned int flags);
typedef bool (*pkgconf_error_handler_func_t)(const char *msg); typedef bool (*pkgconf_error_handler_func_t)(const char *msg, const pkgconf_client_t *client, const void *data);
struct pkgconf_client_ { struct pkgconf_client_ {
pkgconf_list_t dir_list; pkgconf_list_t dir_list;
@ -144,6 +144,7 @@ struct pkgconf_client_ {
pkgconf_list_t global_vars; pkgconf_list_t global_vars;
void *error_handler_data;
pkgconf_error_handler_func_t error_handler; pkgconf_error_handler_func_t error_handler;
FILE *auditf; FILE *auditf;
@ -153,8 +154,8 @@ struct pkgconf_client_ {
}; };
/* client.c */ /* client.c */
void pkgconf_client_init(pkgconf_client_t *client, pkgconf_error_handler_func_t error_handler); void pkgconf_client_init(pkgconf_client_t *client, pkgconf_error_handler_func_t error_handler, void *error_handler_data);
pkgconf_client_t *pkgconf_client_new(pkgconf_error_handler_func_t error_handler); pkgconf_client_t *pkgconf_client_new(pkgconf_error_handler_func_t error_handler, void *error_handler_data);
void pkgconf_client_deinit(pkgconf_client_t *client); void pkgconf_client_deinit(pkgconf_client_t *client);
void pkgconf_client_free(pkgconf_client_t *client); void pkgconf_client_free(pkgconf_client_t *client);
const char *pkgconf_client_get_sysroot_dir(const pkgconf_client_t *client); const char *pkgconf_client_get_sysroot_dir(const pkgconf_client_t *client);
@ -195,7 +196,7 @@ void pkgconf_client_set_buildroot_dir(pkgconf_client_t *client, const char *buil
#endif /* defined(__INTEL_COMPILER) || defined(__GNUC__) */ #endif /* defined(__INTEL_COMPILER) || defined(__GNUC__) */
bool pkgconf_error(const pkgconf_client_t *client, const char *format, ...) PRINTFLIKE(2, 3); bool pkgconf_error(const pkgconf_client_t *client, const char *format, ...) PRINTFLIKE(2, 3);
bool pkgconf_default_error_handler(const char *msg); bool pkgconf_default_error_handler(const char *msg, const pkgconf_client_t *client, const void *data);
pkgconf_pkg_t *pkgconf_pkg_ref(const pkgconf_client_t *client, pkgconf_pkg_t *pkg); pkgconf_pkg_t *pkgconf_pkg_ref(const pkgconf_client_t *client, pkgconf_pkg_t *pkg);
void pkgconf_pkg_unref(pkgconf_client_t *client, pkgconf_pkg_t *pkg); void pkgconf_pkg_unref(pkgconf_client_t *client, pkgconf_pkg_t *pkg);

View File

@ -25,13 +25,15 @@ pkgconf_error(const pkgconf_client_t *client, const char *format, ...)
vsnprintf(errbuf, sizeof errbuf, format, va); vsnprintf(errbuf, sizeof errbuf, format, va);
va_end(va); va_end(va);
return client->error_handler(errbuf); return client->error_handler(errbuf, client, client->error_handler_data);
} }
bool bool
pkgconf_default_error_handler(const char *msg) pkgconf_default_error_handler(const char *msg, const pkgconf_client_t *client, const void *data)
{ {
(void) msg; (void) msg;
(void) client;
(void) data;
return true; return true;
} }

6
main.c
View File

@ -66,8 +66,10 @@ FILE *error_msgout = NULL;
FILE *logfile_out = NULL; FILE *logfile_out = NULL;
static bool static bool
error_handler(const char *msg) error_handler(const char *msg, const pkgconf_client_t *client, const void *data)
{ {
(void) client;
(void) data;
fprintf(error_msgout, "%s", msg); fprintf(error_msgout, "%s", msg);
return true; return true;
} }
@ -682,7 +684,7 @@ main(int argc, char *argv[])
{ NULL, 0, NULL, 0 } { NULL, 0, NULL, 0 }
}; };
pkgconf_client_init(&pkg_client, error_handler); pkgconf_client_init(&pkg_client, error_handler, NULL);
pkgconf_path_build_from_environ("PKG_CONFIG_SYSTEM_LIBRARY_PATH", SYSTEM_LIBDIR, &filter_libdirs); pkgconf_path_build_from_environ("PKG_CONFIG_SYSTEM_LIBRARY_PATH", SYSTEM_LIBDIR, &filter_libdirs);
pkgconf_path_build_from_environ("PKG_CONFIG_SYSTEM_INCLUDE_PATH", SYSTEM_INCLUDEDIR, &filter_includedirs); pkgconf_path_build_from_environ("PKG_CONFIG_SYSTEM_INCLUDE_PATH", SYSTEM_INCLUDEDIR, &filter_includedirs);