Allow logging procedure to be reset to the default

This commit is contained in:
Shahram Najm 2022-11-19 17:49:39 +00:00
parent 3ee268a53e
commit 4f084f050e
2 changed files with 32 additions and 5 deletions

View File

@ -242,20 +242,22 @@ static void default_print(const grib_context* c, void* descriptor, const char* m
void grib_context_set_print_proc(grib_context* c, grib_print_proc p)
{
c = c ? c : grib_context_get_default();
c->print = p;
c = c ? c : grib_context_get_default();
/* Set logging back to the default if p is NULL */
c->print = (p ? p : &default_print);
}
void grib_context_set_debug(grib_context* c, int mode)
{
c = c ? c : grib_context_get_default();
c = c ? c : grib_context_get_default();
c->debug = mode;
}
void grib_context_set_logging_proc(grib_context* c, grib_log_proc p)
{
c = c ? c : grib_context_get_default();
c->output_log = p;
c = c ? c : grib_context_get_default();
/* Set logging back to the default if p is NULL */
c->output_log = (p ? p : &default_log);
}
long grib_get_api_version()

View File

@ -14,6 +14,7 @@
#define NUMBER(x) (sizeof(x) / sizeof(x[0]))
int assertion_caught = 0;
int logging_caught = 0;
typedef enum
{
@ -1468,6 +1469,28 @@ static void test_assertion_catching()
free(list);
}
static void my_logging_proc(const grib_context* c, int level, const char* mesg)
{
logging_caught = 1;
}
static void test_logging_proc()
{
grib_context* context = grib_context_get_default();
Assert(logging_caught == 0);
/* Override default behaviour */
grib_context_set_logging_proc(context, my_logging_proc);
grib_context_log(context, GRIB_LOG_ERROR, "This error will be handled by me");
Assert(logging_caught == 1);
/* Restore the logging proc */
logging_caught = 0;
grib_context_set_logging_proc(context, NULL);
grib_context_log(context, GRIB_LOG_ERROR, "This will come out as normal");
Assert(logging_caught == 0);
}
static void test_concept_condition_strings()
{
int err = 0;
@ -1631,10 +1654,12 @@ static void test_parse_keyval_string()
free( (void*)values3[0].name );
}
int main(int argc, char** argv)
{
printf("Doing unit tests. ecCodes version = %ld\n", grib_get_api_version());
test_logging_proc();
test_grib_binary_search();
test_parse_keyval_string();