diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-30 09:25:09 +1100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-01-30 14:38:07 +1100 |
commit | 9099972c20a49a96a0abac2ff2c4b163b59c6883 (patch) | |
tree | d31e3a874f42f11e451cb35dc919c442f4ee303e /dive.h | |
parent | 702493053063688e6341fc1cfc3f9450c120b4ba (diff) | |
download | subsurface-9099972c20a49a96a0abac2ff2c4b163b59c6883.tar.gz |
Make 'get_dive_by_diveid()' work even for non-primary dive computers
It's only used by the Uemis importer, and Dirk always seems to import
his Uemis data first, so it wasn't very noticeable. But if the Uemis
data wasn't the first dive computer, it would not find the dive.
Side note: just comparing deviceid is not correct. We should pass in
the device model too. But again, that will realistically never really
matter, since non-Uemis importers will generate complex SHA1 hashes of
the dive data for the dive ID, so a collision with the Uemis numbers is
very unlikely.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'dive.h')
-rw-r--r-- | dive.h | 31 |
1 files changed, 18 insertions, 13 deletions
@@ -440,19 +440,6 @@ static inline struct dive *get_dive(int nr) return dive_table.dives[nr]; } -static inline struct dive *get_dive_by_diveid(int diveid, int deviceid) -{ - int i; - for (i = 0; i < dive_table.nr; i++) - if (dive_table.dives[i]->dc.diveid == diveid && - dive_table.dives[i]->dc.deviceid == deviceid) - return dive_table.dives[i]; - return NULL; -} - -/* Check if two dive computer entries are the exact same dive (-1=no/0=maybe/1=yes) */ -extern int match_one_dc(struct divecomputer *a, struct divecomputer *b); - /* * Iterate over each dive, with the first parameter being the index * iterator variable, and the second one being the dive one. @@ -463,6 +450,24 @@ extern int match_one_dc(struct divecomputer *a, struct divecomputer *b); #define for_each_dive(_i,_x) \ for ((_i) = 0; ((_x) = get_dive(_i)) != NULL; (_i)++) +static inline struct dive *get_dive_by_diveid(int diveid, int deviceid) +{ + int i; + struct dive *dive; + + for_each_dive(i, dive) { + struct divecomputer *dc = &dive->dc; + do { + if (dc->diveid == diveid && dc->deviceid == deviceid) + return dive; + } while ((dc = dc->next) != NULL); + } + return NULL; +} + +/* Check if two dive computer entries are the exact same dive (-1=no/0=maybe/1=yes) */ +extern int match_one_dc(struct divecomputer *a, struct divecomputer *b); + extern void parse_xml_init(void); extern void parse_xml_buffer(const char *url, const char *buf, int size, GError **error); extern void parse_xml_exit(void); |