diff options
author | Michael Dankov <tryagain@navit-project.org> | 2015-08-16 01:03:42 +0300 |
---|---|---|
committer | Michael Dankov <tryagain@navit-project.org> | 2015-08-16 01:07:22 +0300 |
commit | 37dd4f49eaf19d9d30393041cbe341aeeb50b889 (patch) | |
tree | e6e2a0ef81c0e524281b31f535ef5b3a0892eea8 | |
parent | 63fb07481d75ee10e3f67cf4671e99fc5895f46d (diff) | |
download | navit-37dd4f49eaf19d9d30393041cbe341aeeb50b889.tar.gz |
Fix:maptool:Do not segfault when unable to open output binfile.
-rw-r--r-- | navit/maptool/maptool.c | 5 | ||||
-rw-r--r-- | navit/maptool/maptool.h | 2 | ||||
-rw-r--r-- | navit/maptool/zip.c | 15 |
3 files changed, 19 insertions, 3 deletions
diff --git a/navit/maptool/maptool.c b/navit/maptool/maptool.c index 3fc47b680..e9c229494 100644 --- a/navit/maptool/maptool.c +++ b/navit/maptool/maptool.c @@ -711,7 +711,10 @@ maptool_assemble_map(struct maptool_params *p, char *suffix, char **filenames, c zip_set_compression_level(zip_info, p->compression_level); if (p->md5file) zip_set_md5(zip_info, 1); - zip_open(zip_info, p->result, zipdir, zipindex); + if(!zip_open(zip_info, p->result, zipdir, zipindex)) { + fprintf(stderr,"Fatal: Could not write output file.\n"); + exit(1); + } if (p->url) { map_information_attrs[1].type=attr_url; map_information_attrs[1].u.str=p->url; diff --git a/navit/maptool/maptool.h b/navit/maptool/maptool.h index d8813b49f..7fde891dd 100644 --- a/navit/maptool/maptool.h +++ b/navit/maptool/maptool.h @@ -412,7 +412,7 @@ void zip_set_maxnamelen(struct zip_info *info, int max); int zip_get_maxnamelen(struct zip_info *info); int zip_add_member(struct zip_info *info); int zip_set_timestamp(struct zip_info *info, char *timestamp); -void zip_open(struct zip_info *info, char *out, char *dir, char *index); +int zip_open(struct zip_info *info, char *out, char *dir, char *index); FILE *zip_get_index(struct zip_info *info); int zip_get_zipnum(struct zip_info *info); void zip_set_zipnum(struct zip_info *info, int num); diff --git a/navit/maptool/zip.c b/navit/maptool/zip.c index 3d58d191e..b75f1e3e7 100644 --- a/navit/maptool/zip.c +++ b/navit/maptool/zip.c @@ -428,12 +428,25 @@ zip_set_timestamp(struct zip_info *info, char *timestamp) return 0; } -void +int zip_open(struct zip_info *info, char *out, char *dir, char *index) { info->res2=fopen(out,"wb+"); + if(!info->res2) { + fprintf(stderr,"Could not open output zip file %s\n", out); + return 0; + } info->dir=fopen(dir,"wb+"); + if(!info->dir) { + fprintf(stderr,"Could not open zip directory %s\n", dir); + return 0; + } info->index=fopen(index,"wb+"); + if(!info->index) { + fprintf(stderr,"Could not open index %s\n", index); + return 0; + } + return 1; } FILE * |