diff options
author | Dario Lombardo <lomato@gmail.com> | 2017-02-20 15:30:27 +0100 |
---|---|---|
committer | Dario Lombardo <lomato@gmail.com> | 2017-02-22 13:58:23 +0000 |
commit | 955cf0ba370494ecbf4ec9e0e81e1c02966d0b53 (patch) | |
tree | 2d4f7de4daf996a2d989228a18ef1fed35d5efa9 /editcap.c | |
parent | 23c83358f26226f01d30eafe0ded4597d82269b6 (diff) |
editcap: use single exit point.
Change-Id: I9ed9a7effdcfdb660616f5199a8227b466e91ad4
Reviewed-on: https://code.wireshark.org/review/20204
Reviewed-by: Michael Mann <mmann78@netscape.net>
Petri-Dish: Dario Lombardo <lomato@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Dario Lombardo <lomato@gmail.com>
Diffstat (limited to 'editcap.c')
-rw-r--r-- | editcap.c | 43 |
1 files changed, 25 insertions, 18 deletions
@@ -96,6 +96,9 @@ #define INVALID_OPTION 1 #define INVALID_FILE 2 +#define CANT_EXTRACT_PREFIX 2 +#define WRITE_ERROR 2 +#define DUMP_ERROR 2 /* * Some globals so we can pass things to various routines @@ -960,7 +963,7 @@ main(int argc, char *argv[]) GString *comp_info_str; GString *runtime_info_str; char *init_progfile_dir_error; - wtap *wth; + wtap *wth = NULL; int i, j, read_err, write_err; gchar *read_err_info, *write_err_info; int opt; @@ -1404,8 +1407,10 @@ main(int argc, char *argv[]) /* Extra actions for the first packet */ if (read_count == 1) { if (split_packet_count != 0 || secs_per_block != 0) { - if (!fileset_extract_prefix_suffix(argv[optind+1], &fprefix, &fsuffix)) - goto error_on_exit; + if (!fileset_extract_prefix_suffix(argv[optind+1], &fprefix, &fsuffix)) { + ret = CANT_EXTRACT_PREFIX; + goto clean_exit; + } filename = fileset_get_filename_by_pattern(block_cnt++, phdr, fprefix, fsuffix); } else { @@ -1425,7 +1430,8 @@ main(int argc, char *argv[]) if (pdh == NULL) { fprintf(stderr, "editcap: Can't open or create %s: %s\n", filename, wtap_strerror(write_err)); - goto error_on_exit; + ret = INVALID_FILE; + goto clean_exit; } } /* first packet only handling */ @@ -1448,7 +1454,8 @@ main(int argc, char *argv[]) if (!wtap_dump_close(pdh, &write_err)) { fprintf(stderr, "editcap: Error writing to %s: %s\n", filename, wtap_strerror(write_err)); - goto error_on_exit; + ret = WRITE_ERROR; + goto clean_exit; } block_start.secs = block_start.secs + secs_per_block; /* reset for next interval */ g_free(filename); @@ -1465,7 +1472,8 @@ main(int argc, char *argv[]) if (pdh == NULL) { fprintf(stderr, "editcap: Can't open or create %s: %s\n", filename, wtap_strerror(write_err)); - goto error_on_exit; + ret = INVALID_FILE; + goto clean_exit; } } } @@ -1477,7 +1485,8 @@ main(int argc, char *argv[]) if (!wtap_dump_close(pdh, &write_err)) { fprintf(stderr, "editcap: Error writing to %s: %s\n", filename, wtap_strerror(write_err)); - goto error_on_exit; + ret = WRITE_ERROR; + goto clean_exit; } g_free(filename); @@ -1493,7 +1502,8 @@ main(int argc, char *argv[]) if (pdh == NULL) { fprintf(stderr, "editcap: Can't open or create %s: %s\n", filename, wtap_strerror(write_err)); - goto error_on_exit; + ret = INVALID_FILE; + goto clean_exit; } } } /* split packet handling */ @@ -1830,7 +1840,8 @@ main(int argc, char *argv[]) filename, wtap_strerror(write_err)); break; } - goto error_on_exit; + ret = DUMP_ERROR; + goto clean_exit; } written_count++; } @@ -1864,14 +1875,16 @@ main(int argc, char *argv[]) if (pdh == NULL) { fprintf(stderr, "editcap: Can't open or create %s: %s\n", filename, wtap_strerror(write_err)); - goto error_on_exit; + ret = INVALID_FILE; + goto clean_exit; } } if (!wtap_dump_close(pdh, &write_err)) { fprintf(stderr, "editcap: Error writing to %s: %s\n", filename, wtap_strerror(write_err)); - goto error_on_exit; + ret = WRITE_ERROR; + goto clean_exit; } g_free(filename); @@ -1892,23 +1905,17 @@ main(int argc, char *argv[]) (long int)relative_time_window.nsecs); } +clean_exit: wtap_block_array_free(shb_hdrs); wtap_block_array_free(nrb_hdrs); g_free(idb_inf); wtap_close(wth); -clean_exit: wtap_cleanup(); free_progdirs(); #ifdef HAVE_PLUGINS plugins_cleanup(); #endif return ret; - -error_on_exit: - wtap_block_array_free(shb_hdrs); - wtap_block_array_free(nrb_hdrs); - g_free(idb_inf); - exit(2); } /* Skip meta-information read from file to return offset of real |