X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/4db3faa68cba0d7d570d11f9f8cac6d1f85afc70..0499559f79926c3a6f1339e93b012637df1c292c:/db/migrate/013_populate_node_tags_and_remove_helper.c diff --git a/db/migrate/013_populate_node_tags_and_remove_helper.c b/db/migrate/013_populate_node_tags_and_remove_helper.c index b1868ef24..5a0fbb6cd 100644 --- a/db/migrate/013_populate_node_tags_and_remove_helper.c +++ b/db/migrate/013_populate_node_tags_and_remove_helper.c @@ -45,15 +45,16 @@ static void write_csv_col(FILE *f, const char *str, char end) { } static void unescape(char *str) { - char *i = str, *o = str; + char *i = str, *o = str, tmp; while (*i) { if (*i == '\\') { i++; - switch (*i++) { + switch (tmp = *i++) { case 's': *o++ = ';'; break; case 'e': *o++ = '='; break; case '\\': *o++ = '\\'; break; + default: *o++ = tmp; break; } } else { *o++ = *i++; @@ -85,7 +86,7 @@ static int read_node_tags(char **tags, char **k, char **v) { struct data { MYSQL *mysql; size_t version_size; - uint32_t *version; + uint16_t *version; }; static void proc_nodes(struct data *d, const char *tbl, FILE *out, FILE *out_tags, int hist) { @@ -105,7 +106,7 @@ static void proc_nodes(struct data *d, const char *tbl, FILE *out, FILE *out_tag unsigned long id = strtoul(row[0], NULL, 10); uint32_t version; - if (id > d->version_size) { + if (id >= d->version_size) { fprintf(stderr, "preallocated nodes size exceeded"); abort(); } @@ -198,10 +199,16 @@ int main(int argc, char **argv) { d->mysql = connect_to_mysql(argv); d->version_size = 1 + select_size(d->mysql, "SELECT max(id) FROM current_nodes"); - d->version = malloc(sizeof(uint32_t) * d->version_size); + d->version = (uint16_t *) malloc(sizeof(uint16_t) * d->version_size); + if (!d->version) { + perror("malloc"); + abort(); + exit(EXIT_FAILURE); + } + memset(d->version, 0, sizeof(uint16_t) * d->version_size); prefix_len = strlen(argv[7]); - tempfn = (char *) malloc(prefix_len + 16); + tempfn = (char *) malloc(prefix_len + 32); strcpy(tempfn, argv[7]); strcpy(tempfn + prefix_len, "current_nodes");