]> git.openstreetmap.org Git - rails.git/blobdiff - db/migrate/013_populate_node_tags_and_remove_helper.c
api06: Use 2-byte ints and check malloc return value.
[rails.git] / db / migrate / 013_populate_node_tags_and_remove_helper.c
index fd000343f6725c30287cd5a84ef36953d48e40d4..e0e8bb3f722006ae91a3a1346531a863db8be4d1 100644 (file)
@@ -85,7 +85,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 +105,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,8 +198,13 @@ 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);
-  memset(d->version, 0, 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 + 32);