X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=filter_common.c;h=7966b806f0745bfc6d35b630693ef31e285ac3a8;hb=refs%2Fheads%2Fpu;hp=f48e457005ca3510fb51d5e5f95405af15d927c1;hpb=a5a6446fd1af4a0ad03ef06a3c194d37d6a46acd;p=paraslash.git diff --git a/filter_common.c b/filter_common.c index f48e4570..bcc79f55 100644 --- a/filter_common.c +++ b/filter_common.c @@ -67,11 +67,11 @@ const char *filter_name(int filter_num) * filter, optionally followed by options for this filter. If yes, call the * command line parser of that filter and its ->setup method. * - * \return This function either succeeds or does not return. On success, the - * number of the filter is returned and conf is initialized to point to the - * filter configuration as returned by the filter's ->setup() method, if any. - * Moreover, *lprp is initialized to contain the parsed command line options. - * On errors, the function calls exit(EXIT_FAILURE). + * \return On success, the number of the filter is returned and conf is + * initialized to point to the filter configuration as returned by the filter's + * ->setup() method, if any. Moreover, *lprp is initialized to contain the + * parsed command line options. On errors a negative paraslash error code is + * returned. */ int filter_setup(const char *fa, void **conf, struct lls_parse_result **lprp) { @@ -80,9 +80,10 @@ int filter_setup(const char *fa, void **conf, struct lls_parse_result **lprp) const struct lls_command *cmd; const struct filter *f; + *lprp = NULL; ret = create_argv(fa, " \t\n", &argv); if (ret < 0) - goto fail; + return ret; argc = ret; ret = lls(lls_lookup_subcmd(argv[0], filter_cmd_suite, &errctx)); if (ret < 0) @@ -99,18 +100,17 @@ int filter_setup(const char *fa, void **conf, struct lls_parse_result **lprp) if (ret < 0) goto free_argv; f = filter_get(filter_num); + assert(f); *conf = f->setup? f->setup(*lprp) : NULL; ret = filter_num; free_argv: free_argv(argv); if (ret >= 0) return ret; -fail: if (errctx) PARA_ERROR_LOG("%s\n", errctx); free(errctx); - PARA_EMERG_LOG("%s\n", para_strerror(-ret)); - exit(EXIT_FAILURE); + return ret; } /**