mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Load and save extra data in git format
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
d6b4109409
commit
4ccddf95d7
2 changed files with 37 additions and 1 deletions
28
load-git.c
28
load-git.c
|
@ -540,6 +540,32 @@ static void parse_event_keyvalue(void *_event, const char *key, const char *valu
|
|||
report_error("Unexpected event key/value pair (%s/%s)", key, value);
|
||||
}
|
||||
|
||||
/* keyvalue "key" "value"
|
||||
* so we have two strings (possibly empty) in the membuffer, separated by a '\0' */
|
||||
static void parse_dc_keyvalue(char *line, struct membuffer *str, void *_dc)
|
||||
{
|
||||
const char *key, *value;
|
||||
struct divecomputer *dc = _dc;
|
||||
|
||||
// Let's make sure we have two strings...
|
||||
int string_counter = 0;
|
||||
while(*line) {
|
||||
if (*line == '"')
|
||||
string_counter++;
|
||||
line++;
|
||||
}
|
||||
if (string_counter != 2)
|
||||
return;
|
||||
|
||||
// stupidly the second string in the membuffer isn't NUL terminated;
|
||||
// asking for a cstring fixes that; interestingly enough, given that there are two
|
||||
// strings in the mb, the next command at the same time assigns a pointer to the
|
||||
// first string to 'key' and NUL terminates the second string (which then goes to 'value')
|
||||
key = mb_cstring(str);
|
||||
value = key + strlen(key) + 1;
|
||||
add_extra_data(dc, key, value);
|
||||
}
|
||||
|
||||
static void parse_dc_event(char *line, struct membuffer *str, void *_dc)
|
||||
{
|
||||
int m, s = 0;
|
||||
|
@ -699,7 +725,7 @@ struct keyword_action dc_action[] = {
|
|||
#undef D
|
||||
#define D(x) { #x, parse_dc_ ## x }
|
||||
D(airtemp), D(date), D(deviceid), D(diveid), D(duration),
|
||||
D(event), D(maxdepth), D(meandepth), D(model), D(salinity),
|
||||
D(event), D(keyvalue), D(maxdepth), D(meandepth), D(model), D(salinity),
|
||||
D(surfacepressure), D(surfacetime), D(time), D(watertemp),
|
||||
};
|
||||
|
||||
|
|
10
save-git.c
10
save-git.c
|
@ -119,6 +119,15 @@ static void save_tags(struct membuffer *b, struct tag_entry *tags)
|
|||
put_string(b, "\n");
|
||||
}
|
||||
|
||||
static void save_extra_data(struct membuffer *b, struct extra_data *ed)
|
||||
{
|
||||
while (ed) {
|
||||
if (ed->key && ed->value)
|
||||
put_format(b, "keyvalue \"%s\" \"%s\"\n", ed->key ? : "", ed->value ? : "");
|
||||
ed = ed->next;
|
||||
}
|
||||
}
|
||||
|
||||
static void put_gasmix(struct membuffer *b, struct gasmix *mix)
|
||||
{
|
||||
int o2 = mix->o2.permille;
|
||||
|
@ -334,6 +343,7 @@ static void save_dc(struct membuffer *b, struct dive *dive, struct divecomputer
|
|||
save_salinity(b, dc);
|
||||
put_duration(b, dc->surfacetime, "surfacetime ", "min\n");
|
||||
|
||||
save_extra_data(b, dc->extra_data);
|
||||
save_events(b, dc->events);
|
||||
save_samples(b, dc->samples, dc->sample);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue