From 2de8e70ab04b0cc254a1d04f31e7e02db57743fa Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Sun, 19 Aug 2018 16:12:16 +0200 Subject: [PATCH] Parser: move match() into core/parse-xml.c The match() function compares a pattern with a name with a twist: The name may either end in '\0' or '.'. If pattern and name match, a parsing function is called on a buffer and a destination value. The result of the parsing is not checked. This seems awfully XML-specific and therefore move the function from the general parse.c to the specialized parse-xml.c unit and make it of local linkage. Signed-off-by: Berthold Stoeger --- core/parse-xml.c | 18 ++++++++++++++++++ core/parse.c | 17 ----------------- core/parse.h | 2 -- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/core/parse-xml.c b/core/parse-xml.c index 1f31d69d7..5cdf577bc 100644 --- a/core/parse-xml.c +++ b/core/parse-xml.c @@ -468,6 +468,24 @@ static void event_divemode(char *buffer, int *value) } } +typedef void (*matchfn_t)(char *buffer, void *); +static int match(const char *pattern, int plen, + const char *name, + matchfn_t fn, char *buf, void *data) +{ + switch (name[plen]) { + case '\0': + case '.': + break; + default: + return 0; + } + if (memcmp(pattern, name, plen)) + return 0; + fn(buf, data); + return 1; +} + #define MATCH(pattern, fn, dest) ({ \ /* Silly type compatibility test */ \ if (0) (fn)("test", dest); \ diff --git a/core/parse.c b/core/parse.c index 68e409b94..690b4d29a 100644 --- a/core/parse.c +++ b/core/parse.c @@ -114,23 +114,6 @@ void nonmatch(const char *type, const char *name, char *buffer) type, name, buffer); } -int match(const char *pattern, int plen, - const char *name, - matchfn_t fn, char *buf, void *data) -{ - switch (name[plen]) { - case '\0': - case '.': - break; - default: - return 0; - } - if (memcmp(pattern, name, plen)) - return 0; - fn(buf, data); - return 1; -} - void event_start(void) { memset(&cur_event, 0, sizeof(cur_event)); diff --git a/core/parse.h b/core/parse.h index 2a666ec4d..5682e4c03 100644 --- a/core/parse.h +++ b/core/parse.h @@ -61,8 +61,6 @@ int trimspace(char *buffer); void clear_table(struct dive_table *table); void start_match(const char *type, const char *name, char *buffer); void nonmatch(const char *type, const char *name, char *buffer); -typedef void (*matchfn_t)(char *buffer, void *); -int match(const char *pattern, int plen, const char *name, matchfn_t fn, char *buf, void *data); void event_start(void); void event_end(void); struct divecomputer *get_dc(void);