X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-cli.git;a=blobdiff_plain;f=sigrok-cli.c;h=a626636dd137644f3b07ce5115ce074dcd5798ec;hp=805e2199691de50b6c7b20761ef20d91bcd935fa;hb=5acb76821f33f03745e26c91fbb9cc7bcf34512a;hpb=8630d4a814e95b824b152c1bac3d68640ea3f53e diff --git a/sigrok-cli.c b/sigrok-cli.c index 805e219..a626636 100644 --- a/sigrok-cli.c +++ b/sigrok-cli.c @@ -1475,8 +1475,10 @@ static void logger(const gchar *log_domain, GLogLevelFlags log_level, int main(int argc, char **argv) { + int ret = 1; GOptionContext *context; GError *error; + struct sr_context *sr_ctx = NULL; g_log_set_default_handler(logger, NULL); @@ -1486,36 +1488,36 @@ int main(int argc, char **argv) if (!g_option_context_parse(context, &argc, &argv, &error)) { g_critical("%s", error->message); - return 1; + goto done; } /* Set the loglevel (amount of messages to output) for libsigrok. */ if (sr_log_loglevel_set(opt_loglevel) != SR_OK) - return 1; + goto done; /* Set the loglevel (amount of messages to output) for libsigrokdecode. */ if (srd_log_loglevel_set(opt_loglevel) != SRD_OK) - return 1; + goto done; - if (sr_init() != SR_OK) - return 1; + if (sr_init(&sr_ctx) != SR_OK) + goto done; if (opt_pds) { if (srd_init(NULL) != SRD_OK) - return 1; + goto done; if (register_pds(NULL, opt_pds) != 0) - return 1; + goto done; if (srd_pd_output_callback_add(SRD_OUTPUT_ANN, show_pd_annotations, NULL) != SRD_OK) - return 1; + goto done; if (setup_pd_stack() != 0) - return 1; + goto done; if (setup_pd_annotations() != 0) - return 1; + goto done; } if (setup_output_format() != 0) - return 1; + goto done; if (opt_version) show_version(); @@ -1535,8 +1537,13 @@ int main(int argc, char **argv) if (opt_pds) srd_exit(); - sr_exit(); + ret = 0; + +done: + if (sr_ctx) + sr_exit(sr_ctx); + g_option_context_free(context); - return 0; + return ret; }