diff --git a/.gitignore b/.gitignore index 781a2ad6dc95c3ffe6931e3468a1051a42825a21..067da8c1a74fccbfd7bc3fbe3a589453782f1a3b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ Makefile config.log config.status +autom4te.cache Doxyfile config.h examples/test_osm1 diff --git a/configure b/configure index 5c0c46156f07282bd069b722aa8750118b4d47d5..21558f6e51d87360fd492faca4d1a7818c74f868 100755 --- a/configure +++ b/configure @@ -738,6 +738,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -824,6 +825,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1076,6 +1078,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1213,7 +1224,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1366,6 +1377,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] diff --git a/headers/readosm_internals.h b/headers/readosm_internals.h index 10aa3fb5b88d0d071f95570efd9e87ccb574f1df..c376a8cb14abe20a41ead3cf637f003ebecda15c 100644 --- a/headers/readosm_internals.h +++ b/headers/readosm_internals.h @@ -44,6 +44,14 @@ / */ +#if 1 +#define XMALLOC(size) (xmalloc((size), __FILE__, __LINE__)) +#else +#define XMALLOC(size) malloc(size) +#endif + +extern void *xmalloc(size_t size, char *file, int line); + /* endianness */ #define READOSM_BIG_ENDIAN 0 #define READOSM_LITTLE_ENDIAN 1 diff --git a/src/osm_objects.c b/src/osm_objects.c index ee4bf69b6b736ad5dc5791995c0ce0fdcb5c0df6..36915a7838679f68acb682c98a7a793e59777d8c 100644 --- a/src/osm_objects.c +++ b/src/osm_objects.c @@ -166,7 +166,7 @@ append_tag_to_node (readosm_internal_node * node, const char *key, else { /* appending a further Tag block */ - tag_blk = malloc (sizeof (readosm_internal_tag_block)); + tag_blk = XMALLOC (sizeof (readosm_internal_tag_block)); tag_blk->next_item = 1; tag_blk->next = NULL; tag = tag_blk->tags; @@ -176,10 +176,10 @@ append_tag_to_node (readosm_internal_node * node, const char *key, /* initializing the Tag */ len = strlen (key); - tag->key = malloc (len + 1); + tag->key = XMALLOC (len + 1); strcpy (tag->key, key); len = strlen (value); - tag->value = malloc (len + 1); + tag->value = XMALLOC (len + 1); strcpy (tag->value, value); } @@ -251,7 +251,7 @@ READOSM_PRIVATE readosm_internal_way * alloc_internal_way (void) { /* allocating an empty internal WAY object */ - readosm_internal_way *way = malloc (sizeof (readosm_internal_way)); + readosm_internal_way *way = XMALLOC (sizeof (readosm_internal_way)); way->id = 0; way->version = 0; way->changeset = 0; @@ -283,7 +283,7 @@ append_reference_to_way (readosm_internal_way * way, long long node_ref) else { /* appending a further Ref block */ - ref = malloc (sizeof (readosm_internal_ref)); + ref = XMALLOC (sizeof (readosm_internal_ref)); *(ref->node_refs + 0) = node_ref; ref->next_item = 1; ref->next = NULL; @@ -309,7 +309,7 @@ append_tag_to_way (readosm_internal_way * way, const char *key, else { /* appending a further Tag block */ - tag_blk = malloc (sizeof (readosm_internal_tag_block)); + tag_blk = XMALLOC (sizeof (readosm_internal_tag_block)); tag_blk->next_item = 1; tag_blk->next = NULL; tag = tag_blk->tags; @@ -319,10 +319,10 @@ append_tag_to_way (readosm_internal_way * way, const char *key, /* initializing the Tag */ len = strlen (key); - tag->key = malloc (len + 1); + tag->key = XMALLOC (len + 1); strcpy (tag->key, key); len = strlen (value); - tag->value = malloc (len + 1); + tag->value = XMALLOC (len + 1); strcpy (tag->value, value); } @@ -428,7 +428,7 @@ alloc_internal_relation (void) { /* allocating an empty internal RELATION object */ readosm_internal_relation *rel = - malloc (sizeof (readosm_internal_relation)); + XMALLOC (sizeof (readosm_internal_relation)); rel->id = 0; rel->version = 0; rel->changeset = 0; @@ -463,7 +463,7 @@ append_member_to_relation (readosm_internal_relation * relation, int type, else { /* appending a further Member block */ - mbr_blk = malloc (sizeof (readosm_internal_member_block)); + mbr_blk = XMALLOC (sizeof (readosm_internal_member_block)); mbr_blk->next_item = 1; mbr_blk->next = NULL; member = mbr_blk->members; @@ -474,7 +474,7 @@ append_member_to_relation (readosm_internal_relation * relation, int type, member->member_type = type; member->id = id; len = strlen (role); - member->role = malloc (len + 1); + member->role = XMALLOC (len + 1); strcpy (member->role, role); } @@ -495,7 +495,7 @@ append_tag_to_relation (readosm_internal_relation * relation, const char *key, else { /* appending a further Tag block */ - tag_blk = malloc (sizeof (readosm_internal_tag_block)); + tag_blk = XMALLOC (sizeof (readosm_internal_tag_block)); tag_blk->next_item = 1; tag_blk->next = NULL; tag = tag_blk->tags; @@ -505,10 +505,10 @@ append_tag_to_relation (readosm_internal_relation * relation, const char *key, /* initializing the Tag */ len = strlen (key); - tag->key = malloc (len + 1); + tag->key = XMALLOC (len + 1); strcpy (tag->key, key); len = strlen (value); - tag->value = malloc (len + 1); + tag->value = XMALLOC (len + 1); strcpy (tag->value, value); } @@ -639,7 +639,7 @@ call_node_callback (readosm_node_callback node_callback, int i; readosm_export_tag *p_tag; exp_node.tags = - malloc (sizeof (readosm_export_tag) * exp_node.tag_count); + XMALLOC (sizeof (readosm_export_tag) * exp_node.tag_count); for (i = 0; i < exp_node.tag_count; i++) { p_tag = exp_node.tags + i; @@ -707,14 +707,14 @@ call_way_callback (readosm_way_callback way_callback, if (way->user != NULL) { len = strlen (way->user); - exp_way.user = malloc (len + 1); + exp_way.user = XMALLOC (len + 1); strcpy (exp_way.user, way->user); } exp_way.uid = way->uid; if (way->timestamp != NULL) { len = strlen (way->timestamp); - exp_way.timestamp = malloc (len + 1); + exp_way.timestamp = XMALLOC (len + 1); strcpy (exp_way.timestamp, way->timestamp); } @@ -729,7 +729,7 @@ call_way_callback (readosm_way_callback way_callback, if (exp_way.node_ref_count > 0) { exp_way.node_refs = - malloc (sizeof (long long) * exp_way.node_ref_count); + XMALLOC (sizeof (long long) * exp_way.node_ref_count); i = 0; ref = &(way->first_ref); while (ref) @@ -754,7 +754,7 @@ call_way_callback (readosm_way_callback way_callback, { readosm_export_tag *p_tag; exp_way.tags = - malloc (sizeof (readosm_export_tag) * exp_way.tag_count); + XMALLOC (sizeof (readosm_export_tag) * exp_way.tag_count); for (i = 0; i < exp_way.tag_count; i++) { p_tag = exp_way.tags + i; @@ -771,13 +771,13 @@ call_way_callback (readosm_way_callback way_callback, if (tag->key != NULL) { len = strlen (tag->key); - p_tag->key = malloc (len + 1); + p_tag->key = XMALLOC (len + 1); strcpy (p_tag->key, tag->key); } if (tag->value != NULL) { len = strlen (tag->value); - p_tag->value = malloc (len + 1); + p_tag->value = XMALLOC (len + 1); strcpy (p_tag->value, tag->value); } i++; @@ -826,14 +826,14 @@ call_relation_callback (readosm_relation_callback relation_callback, if (relation->user != NULL) { len = strlen (relation->user); - exp_relation.user = malloc (len + 1); + exp_relation.user = XMALLOC (len + 1); strcpy (exp_relation.user, relation->user); } exp_relation.uid = relation->uid; if (relation->timestamp != NULL) { len = strlen (relation->timestamp); - exp_relation.timestamp = malloc (len + 1); + exp_relation.timestamp = XMALLOC (len + 1); strcpy (exp_relation.timestamp, relation->timestamp); } @@ -848,7 +848,7 @@ call_relation_callback (readosm_relation_callback relation_callback, { readosm_export_member *p_member; exp_relation.members = - malloc (sizeof (readosm_export_member) * + XMALLOC (sizeof (readosm_export_member) * exp_relation.member_count); for (i = 0; i < exp_relation.member_count; i++) { @@ -868,7 +868,7 @@ call_relation_callback (readosm_relation_callback relation_callback, if (member->role != NULL) { len = strlen (member->role); - p_member->role = malloc (len + 1); + p_member->role = XMALLOC (len + 1); strcpy (p_member->role, member->role); } i++; @@ -888,7 +888,7 @@ call_relation_callback (readosm_relation_callback relation_callback, { readosm_export_tag *p_tag; exp_relation.tags = - malloc (sizeof (readosm_export_tag) * exp_relation.tag_count); + XMALLOC (sizeof (readosm_export_tag) * exp_relation.tag_count); for (i = 0; i < exp_relation.tag_count; i++) { p_tag = exp_relation.tags + i; @@ -905,13 +905,13 @@ call_relation_callback (readosm_relation_callback relation_callback, if (tag->key != NULL) { len = strlen (tag->key); - p_tag->key = malloc (len + 1); + p_tag->key = XMALLOC (len + 1); strcpy (p_tag->key, tag->key); } if (tag->value != NULL) { len = strlen (tag->value); - p_tag->value = malloc (len + 1); + p_tag->value = XMALLOC (len + 1); strcpy (p_tag->value, tag->value); } i++; diff --git a/src/osmxml.c b/src/osmxml.c index ff0993f1746e683f624c41545c6ddce4a78c4476..d920e3565c6a3c9fccdb20d4235ad4ee1123468f 100644 --- a/src/osmxml.c +++ b/src/osmxml.c @@ -255,7 +255,7 @@ xml_start_node (struct xml_params *params, const char **attr) if (strcmp (attr[i], "user") == 0) { len = strlen (attr[i + 1]); - params->node.user = malloc (len + 1); + params->node.user = XMALLOC (len + 1); strcpy (params->node.user, attr[i + 1]); } if (strcmp (attr[i], "uid") == 0) @@ -263,7 +263,7 @@ xml_start_node (struct xml_params *params, const char **attr) if (strcmp (attr[i], "timestamp") == 0) { len = strlen (attr[i + 1]); - params->node.timestamp = malloc (len + 1); + params->node.timestamp = XMALLOC (len + 1); strcpy (params->node.timestamp, attr[i + 1]); } } @@ -303,7 +303,7 @@ xml_start_way (struct xml_params *params, const char **attr) if (strcmp (attr[i], "user") == 0) { len = strlen (attr[i + 1]); - params->way.user = malloc (len + 1); + params->way.user = XMALLOC (len + 1); strcpy (params->way.user, attr[i + 1]); } if (strcmp (attr[i], "uid") == 0) @@ -311,7 +311,7 @@ xml_start_way (struct xml_params *params, const char **attr) if (strcmp (attr[i], "timestamp") == 0) { len = strlen (attr[i + 1]); - params->way.timestamp = malloc (len + 1); + params->way.timestamp = XMALLOC (len + 1); strcpy (params->way.timestamp, attr[i + 1]); } } @@ -350,7 +350,7 @@ xml_start_relation (struct xml_params *params, const char **attr) if (strcmp (attr[i], "user") == 0) { len = strlen (attr[i + 1]); - params->relation.user = malloc (len + 1); + params->relation.user = XMALLOC (len + 1); strcpy (params->relation.user, attr[i + 1]); } if (strcmp (attr[i], "uid") == 0) @@ -358,7 +358,7 @@ xml_start_relation (struct xml_params *params, const char **attr) if (strcmp (attr[i], "timestamp") == 0) { len = strlen (attr[i + 1]); - params->relation.timestamp = malloc (len + 1); + params->relation.timestamp = XMALLOC (len + 1); strcpy (params->relation.timestamp, attr[i + 1]); } } diff --git a/src/protobuf.c b/src/protobuf.c index f127d8cc4f4afdd1073f77c1bfca32ec1ae4198c..f77240d4e2ac4a60a56f6f8cf16d94a9a113ca31 100644 --- a/src/protobuf.c +++ b/src/protobuf.c @@ -104,7 +104,7 @@ add_variant_hints (readosm_variant * variant, unsigned char type, unsigned char field_id) { /* adding a field hint to a PBF Variant object */ - readosm_variant_hint *hint = malloc (sizeof (readosm_variant_hint)); + readosm_variant_hint *hint = XMALLOC (sizeof (readosm_variant_hint)); hint->type = type; hint->field_id = field_id; hint->next = NULL; @@ -188,8 +188,8 @@ append_string_to_table (readosm_string_table * string_table, readosm_variant * variant) { /* appending a string to a PBF StringTable object */ - readosm_string *string = malloc (sizeof (readosm_string)); - string->string = malloc (variant->length + 1); + readosm_string *string = XMALLOC (sizeof (readosm_string)); + string->string = XMALLOC (variant->length + 1); memcpy (string->string, variant->pointer, variant->length); *(string->string + variant->length) = '\0'; string->next = NULL; @@ -217,7 +217,7 @@ array_from_string_table (readosm_string_table * string_table) /* allocating the pointer array */ string_table->strings = - malloc (sizeof (readosm_string *) * string_table->count); + XMALLOC (sizeof (readosm_string *) * string_table->count); i = 0; string = string_table->first; while (string != NULL) @@ -864,7 +864,7 @@ skip_osm_header (readosm_file * input, unsigned int sz) int ok_header = 0; int hdsz = 0; size_t rd; - unsigned char *buf = malloc (sz); + unsigned char *buf = XMALLOC (sz); unsigned char *base = buf; unsigned char *start = buf; unsigned char *stop = buf + sz - 1; @@ -908,7 +908,7 @@ skip_osm_header (readosm_file * input, unsigned int sz) if (!ok_header || !hdsz) goto error; - buf = malloc (hdsz); + buf = XMALLOC (hdsz); base = buf; start = buf; stop = buf + hdsz - 1; @@ -1063,7 +1063,7 @@ parse_pbf_node_infos (readosm_packed_infos * packed_infos, } if (count > 0) { - packed_infos->versions = malloc (sizeof (int) * count); + packed_infos->versions = XMALLOC (sizeof (int) * count); for (int kk = 0; kk < count; kk++) { *(packed_infos->versions + kk) = packed_u32.values[kk]; @@ -1089,7 +1089,7 @@ parse_pbf_node_infos (readosm_packed_infos * packed_infos, } if (count > 0) { - packed_infos->timestamps = malloc (sizeof (int) * count); + packed_infos->timestamps = XMALLOC (sizeof (int) * count); for (int kk = 0; kk < count; kk++) { delta += packed_32.values[kk]; @@ -1117,7 +1117,7 @@ parse_pbf_node_infos (readosm_packed_infos * packed_infos, if (count > 0) { packed_infos->changesets = - malloc (sizeof (long long) * count); + XMALLOC (sizeof (long long) * count); for (int kk = 0; kk < count; kk++) { delta += packed_64.values[kk]; @@ -1144,7 +1144,7 @@ parse_pbf_node_infos (readosm_packed_infos * packed_infos, } if (count > 0) { - packed_infos->uids = malloc (sizeof (int) * count); + packed_infos->uids = XMALLOC (sizeof (int) * count); count = 0; for (int kk = 0; kk < count; kk++) { @@ -1172,7 +1172,7 @@ parse_pbf_node_infos (readosm_packed_infos * packed_infos, } if (count > 0) { - packed_infos->users = malloc (sizeof (int) * count); + packed_infos->users = XMALLOC (sizeof (int) * count); for (int kk = 0; kk < count; kk++) { delta += packed_32.values[kk]; @@ -1348,7 +1348,7 @@ parse_pbf_nodes (readosm_string_table * strings, int max_nodes; int base = 0; nd_count = packed_ids.count; - nodes = malloc (sizeof (readosm_internal_node) * MAX_NODES); + nodes = XMALLOC (sizeof (readosm_internal_node) * MAX_NODES); while (base < nd_count) { /* processing about 1024 nodes at each time */ @@ -1396,7 +1396,7 @@ parse_pbf_nodes (readosm_string_table * strings, if (nd->timestamp) free (nd->timestamp); len = strlen (buf); - nd->timestamp = malloc (len + 1); + nd->timestamp = XMALLOC (len + 1); strcpy (nd->timestamp, buf); } nd->changeset = @@ -1414,7 +1414,7 @@ parse_pbf_nodes (readosm_string_table * strings, free (nd->user); if (len > 0) { - nd->user = malloc (len + 1); + nd->user = XMALLOC (len + 1); strcpy (nd->user, s_ptr->string); } } @@ -1562,7 +1562,7 @@ parse_pbf_way_info (readosm_internal_way * way, readosm_string_table * strings, if (way->timestamp) free (way->timestamp); len = strlen (buf); - way->timestamp = malloc (len + 1); + way->timestamp = XMALLOC (len + 1); strcpy (way->timestamp, buf); } } @@ -1588,7 +1588,7 @@ parse_pbf_way_info (readosm_internal_way * way, readosm_string_table * strings, { readosm_string *string = *(strings->strings + userid); int len = strlen (string->string); - way->user = malloc (len + 1); + way->user = XMALLOC (len + 1); strcpy (way->user, string->string); } } @@ -1785,7 +1785,7 @@ parse_pbf_relation_info (readosm_internal_relation * relation, if (relation->timestamp) free (relation->timestamp); len = strlen (buf); - relation->timestamp = malloc (len + 1); + relation->timestamp = XMALLOC (len + 1); strcpy (relation->timestamp, buf); } } @@ -1811,7 +1811,7 @@ parse_pbf_relation_info (readosm_internal_relation * relation, { readosm_string *string = *(strings->strings + userid); int len = strlen (string->string); - relation->user = malloc (len + 1); + relation->user = XMALLOC (len + 1); strcpy (relation->user, string->string); } } @@ -2093,7 +2093,7 @@ parse_osm_data (readosm_file * input, unsigned int sz, int ok_header = 0; int hdsz = 0; size_t rd; - unsigned char *buf = malloc (sz); + unsigned char *buf = XMALLOC (sz); unsigned char *base = buf; unsigned char *start = buf; unsigned char *stop = buf + sz - 1; @@ -2145,7 +2145,7 @@ parse_osm_data (readosm_file * input, unsigned int sz, if (!ok_header || !hdsz) goto error; - buf = malloc (hdsz); + buf = XMALLOC (hdsz); base = buf; start = buf; stop = buf + hdsz - 1; @@ -2171,7 +2171,7 @@ parse_osm_data (readosm_file * input, unsigned int sz, { /* found an uncompressed block */ raw_sz = variant.length; - raw_ptr = malloc (raw_sz); + raw_ptr = XMALLOC (raw_sz); memcpy (raw_ptr, variant.pointer, raw_sz); } if (variant.field_id == 2 && variant.type == READOSM_VAR_INT32) @@ -2191,7 +2191,7 @@ parse_osm_data (readosm_file * input, unsigned int sz, if (zip_ptr != NULL && zip_sz != 0 && raw_sz != 0) { /* unZipping a compressed block */ - raw_ptr = malloc (raw_sz); + raw_ptr = XMALLOC (raw_sz); if (!unzip_compressed_block (zip_ptr, zip_sz, raw_ptr, raw_sz)) goto error; } diff --git a/src/readosm.c b/src/readosm.c index af0af71649cde74ba60e6c7bacced11d82382452..5324d9b4fa7a04cf43a8ee464bed7f4b8e76d859 100644 --- a/src/readosm.c +++ b/src/readosm.c @@ -61,6 +61,12 @@ #define strcasecmp _stricmp #endif /* not WIN32 */ +void * +xmalloc (size_t sz, char *file, int line) +{ + return malloc (sz); +} + static int test_endianness () { @@ -79,7 +85,7 @@ static readosm_file * alloc_osm_file (int little_endian_cpu, int format) { /* allocating and initializing the OSM input file struct */ - readosm_file *input = malloc (sizeof (readosm_file)); + readosm_file *input = XMALLOC (sizeof (readosm_file)); if (!input) return NULL; input->magic1 = READOSM_MAGIC_START;