aboutsummaryrefslogtreecommitdiffstats
path: root/editcap.c
diff options
context:
space:
mode:
authorDario Lombardo <lomato@gmail.com>2017-02-20 15:30:27 +0100
committerDario Lombardo <lomato@gmail.com>2017-02-22 13:58:23 +0000
commit955cf0ba370494ecbf4ec9e0e81e1c02966d0b53 (patch)
tree2d4f7de4daf996a2d989228a18ef1fed35d5efa9 /editcap.c
parent23c83358f26226f01d30eafe0ded4597d82269b6 (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.c43
1 files changed, 25 insertions, 18 deletions
diff --git a/editcap.c b/editcap.c
index 613ee9c552..712ce0fb07 100644
--- a/editcap.c
+++ b/editcap.c
@@ -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