X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=filter_common.c;h=b406951e8ff145542e9ad579bde5311b7e3be1aa;hp=5a5e9d037a96ce1e8db44ae9f60964688ae8a5f5;hb=e79198e9851faddfd64e47654b5bc66fbc574255;hpb=4adde8dae3317fa83b81e7a860c9ed9133e99bb0 diff --git a/filter_common.c b/filter_common.c index 5a5e9d03..b406951e 100644 --- a/filter_common.c +++ b/filter_common.c @@ -28,15 +28,15 @@ * * \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 +45,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 +152,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. *