X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=mood.c;h=f16d9c4cb30e559bf9244804c6edc4c9db4970ab;hp=cb1534bce4a243ce8ea4a10101a4c1a693300b3c;hb=57e0c93e87138fdf1c8793c3d1f3d2880d717548;hpb=5440b8c0464829022a0ba5dd5daa931b15712a11 diff --git a/mood.c b/mood.c index cb1534bc..f16d9c4c 100644 --- a/mood.c +++ b/mood.c @@ -6,8 +6,10 @@ /** \file mood.c Paraslash's mood handling functions. */ +#include #include #include + #include "para.h" #include "error.h" #include "string.h" @@ -63,11 +65,11 @@ typedef int mood_score_function(const char *path, const struct afs_info *afsi, * Some mood parsers pre-process the data given in the mood line to compute a * structure which depends of the particular mood_method and which is used * later in the mood_score_function of the mood_method. The mood_parser may - * store a pointer to its structure via the second argument. + * store a pointer to its structure via the void** pointer. * * \sa mood_open(), mood_cleanup_function, mood_score_function. */ -typedef int mood_parser(const char *, void **); +typedef int mood_parser(int, char **, void **); /** * Deallocate resources which were allocated by the mood_parser. @@ -165,11 +167,10 @@ static uint64_t int_sqrt(uint64_t x) return res; } -static int mm_no_attributes_set_parser(const char *arg, __a_unused void **ignored) +static int mm_no_attributes_set_parser(int argc, __a_unused char **argv, + __a_unused void **ignored) { - if (arg && *arg) - PARA_WARNING_LOG("ignored junk at eol: %s\n", arg); - return 1; + return argc? -E_MOOD_SYNTAX : 1; } static int mm_no_attributes_set_score_function(__a_unused const char *path, @@ -198,11 +199,10 @@ static int mm_played_rarely_score_function(__a_unused const char *path, return -100; } -static int mm_played_rarely_parser(const char *arg, __a_unused void **ignored) +static int mm_played_rarely_parser(int argc, __a_unused char **argv, + __a_unused void **ignored) { - if (arg && *arg) - PARA_WARNING_LOG("ignored junk at eol: %s\n", arg); - return 1; + return argc? -E_MOOD_SYNTAX : 1; } static int mm_path_matches_score_function(const char *path, @@ -215,9 +215,11 @@ static int mm_path_matches_score_function(const char *path, return 100; } -static int mm_path_matches_parser(const char *arg, void **data) +static int mm_path_matches_parser(int argc, char **argv, void **data) { - *data = para_strdup(arg); + if (argc != 1) + return -E_MOOD_SYNTAX; + *data = para_strdup(argv[1]); return 1; } @@ -226,16 +228,20 @@ static void mm_path_matches_cleanup(void *data) free(data); } -static int mm_is_set_parser(const char *arg, void **bitnum) +static int mm_is_set_parser(int argc, char **argv, void **bitnum) { - unsigned char *c = para_malloc(1); - int ret = get_attribute_bitnum_by_name(arg, c); + int ret; + unsigned char c, *res; - if (ret >= 0) - *bitnum = c; - else - free(c); - return ret; + if (argc != 1) + return -E_MOOD_SYNTAX; + ret = get_attribute_bitnum_by_name(argv[1], &c); + if (ret < 0) + return ret; + res = para_malloc(1); + *res = c; + *bitnum = res; + return 1; } static int mm_is_set_score_function(__a_unused const char *path, @@ -476,8 +482,8 @@ check_for_if: ret = -E_MOOD_SYNTAX; if (!mood_methods[i].parser) goto out; - w++; - ret = mood_methods[i].parser(*w, &mi->parser_data); + ret = mood_methods[i].parser(num_words - 1 - (w - argv), w, + &mi->parser_data); if (ret < 0) goto out; mi->method = &mood_methods[i];