diff options
-rw-r--r-- | divelist.c | 17 | ||||
-rw-r--r-- | divelist.h | 1 | ||||
-rw-r--r-- | parse-xml.c | 12 |
3 files changed, 20 insertions, 10 deletions
diff --git a/divelist.c b/divelist.c index 3cbff84ef..3cc0d2c8d 100644 --- a/divelist.c +++ b/divelist.c @@ -767,9 +767,26 @@ void delete_single_dive(int idx) free(dive); } +struct dive **grow_dive_table(struct dive_table *table) +{ + int nr = table->nr, allocated = table->allocated; + struct dive **dives = table->dives; + + if (nr >= allocated) { + allocated = (nr + 32) * 3 / 2; + dives = realloc(dives, allocated * sizeof(struct dive *)); + if (!dives) + exit(1); + table->dives = dives; + table->allocated = allocated; + } + return dives; +} + void add_single_dive(int idx, struct dive *dive) { int i; + grow_dive_table(&dive_table); dive_table.nr++; if (dive->selected) amount_selected++; diff --git a/divelist.h b/divelist.h index bc3fd1af1..5bae09cff 100644 --- a/divelist.h +++ b/divelist.h @@ -22,6 +22,7 @@ extern char *get_dive_gas_string(struct dive *dive); extern dive_trip_t *find_trip_by_idx(int idx); +struct dive **grow_dive_table(struct dive_table *table); extern int trip_has_selected_dives(dive_trip_t *trip); extern void get_dive_gas(struct dive *dive, int *o2_p, int *he_p, int *o2low_p); extern int get_divenr(struct dive *dive); diff --git a/parse-xml.c b/parse-xml.c index 9b223980d..a822395a7 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -67,17 +67,9 @@ void clear_table(struct dive_table *table) void record_dive_to_table(struct dive *dive, struct dive_table *table) { assert(table != NULL); - int nr = table->nr, allocated = table->allocated; - struct dive **dives = table->dives; + struct dive **dives = grow_dive_table(table); + int nr = table->nr; - if (nr >= allocated) { - allocated = (nr + 32) * 3 / 2; - dives = realloc(dives, allocated * sizeof(struct dive *)); - if (!dives) - exit(1); - table->dives = dives; - table->allocated = allocated; - } dives[nr] = fixup_dive(dive); table->nr = nr + 1; } |