X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=filter_common.c;h=add788a8f30465251ff111822b7131cd2e94054b;hp=5a5e9d037a96ce1e8db44ae9f60964688ae8a5f5;hb=ebbea4043aa7c7f200e4f56c3bfa42f5c31f2e03;hpb=4adde8dae3317fa83b81e7a860c9ed9133e99bb0 diff --git a/filter_common.c b/filter_common.c index 5a5e9d03..add788a8 100644 --- a/filter_common.c +++ b/filter_common.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2005 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2005 Andre Noll , see file COPYING. */ /** \file filter_common.c Common helper functions for filter input/output. */ @@ -21,22 +17,22 @@ #include "string.h" /** Iterate over all filters. */ -#define FOR_EACH_FILTER(j) for (j = 1; lls_cmd(j, filter_cmd_suite); j++) +#define FOR_EACH_FILTER(j) for (j = 1; FILTER_CMD(j); j++) /** * Obtain a reference to a filter structure. * * \param filter_num Between zero and NUM_SUPPORTED_FILTERS, inclusively. * - * \return Pointer to the filter identified by the given filter number. + * \return Pointer to the filter identified by the given filter number, or + * NULL if the filter number is out of range. * - * It is a fatal error if the given number is out of range. In this case - * the function aborts. + * \sa filter_name(). */ const struct filter *filter_get(int filter_num) { - assert(filter_num >= 1); - assert(filter_num <= LSG_NUM_FILTER_CMD_SUBCOMMANDS); + if (filter_num < 1 || filter_num > LSG_NUM_FILTER_CMD_SUBCOMMANDS) + return NULL; return lls_user_data(FILTER_CMD(filter_num)); } @@ -45,8 +41,18 @@ static inline bool filter_supported(int filter_num) return lls_user_data(FILTER_CMD(filter_num)); } +/** + * Return the name of a filter, given its number. + * + * \param filter_num See \ref filter_get(). + * + * \return A pointer to a string literal, or NULL if filter_num is out of + * range. The caller must not attempt to call free(3) on the returned pointer. + */ const char *filter_name(int filter_num) { + if (filter_num < 1 || filter_num > LSG_NUM_FILTER_CMD_SUBCOMMANDS) + return NULL; return lls_command_name(FILTER_CMD(filter_num)); } @@ -142,6 +148,26 @@ void print_filter_helps(bool detailed) } } +/** + * Print a short summary of all available filters to stdout. + * + * For each supported filter, the filter name and the purpose text is printed + * in a single line. Since no options are shown, the filter list is more + * concise than the text obtained from print_filter_helps(). + */ +void print_filter_list(void) +{ + int i; + + printf("Available filters:\n"); + FOR_EACH_FILTER(i) { + const struct lls_command *cmd = FILTER_CMD(i); + if (!filter_supported(i)) + continue; + printf("%-9s %s\n", filter_name(i), lls_purpose(cmd)); + } +} + /** * Set select timeout of the scheduler. *