diff options
Diffstat (limited to 'core/parse-xml.c')
-rw-r--r-- | core/parse-xml.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/core/parse-xml.c b/core/parse-xml.c index 47358865b..fa7572ac9 100644 --- a/core/parse-xml.c +++ b/core/parse-xml.c @@ -428,7 +428,7 @@ static void event_name(char *buffer, char *name) { int size = trimspace(buffer); if (size >= MAX_EVENT_NAME) - size = MAX_EVENT_NAME-1; + size = MAX_EVENT_NAME - 1; memcpy(name, buffer, size); name[size] = 0; } @@ -449,6 +449,24 @@ static void get_dc_type(char *buffer, enum dive_comp_type *dct) } } +/* For divemode_text[] (defined in dive.h) determine the index of + * the string contained in the xml divemode attribute and passed + * in buffer, below. Typical xml input would be: + * <event name='modechange' divemode='OC' /> */ +static void event_divemode(char *buffer, int *value) +{ + int size = trimspace(buffer); + if (size >= MAX_EVENT_NAME) + size = MAX_EVENT_NAME - 1; + buffer[size] = 0x0; + for (int i = 0; i < NUM_DC_TYPE; i++) { + if (!strcmp(buffer,divemode_text[i])) { + *value = i; + break; + } + } +} + #define MATCH(pattern, fn, dest) ({ \ /* Silly type compatibility test */ \ if (0) (fn)("test", dest); \ @@ -708,6 +726,8 @@ static void try_to_fill_event(const char *name, char *buf) return; if (MATCH("value", get_index, &cur_event.value)) return; + if (MATCH("divemode", event_divemode, &cur_event.value)) + return; if (MATCH("cylinder", get_index, &cur_event.gas.index)) { /* We add one to indicate that we got an actual cylinder index value */ cur_event.gas.index++; |