diff --git a/text2pcap.c b/text2pcap.c index fe650a0881..a0122bfd90 100644 --- a/text2pcap.c +++ b/text2pcap.c @@ -72,6 +72,7 @@ #include #include #include +#include #include #include #include @@ -338,6 +339,7 @@ print_usage (FILE *output) static int parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump_params * const params) { + int ret; int c; char *p; static const struct ws_option long_options[] = { @@ -372,9 +374,9 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump case 'N': interface_name = ws_optarg; break; case 'o': if (ws_optarg[0] != 'h' && ws_optarg[0] != 'o' && ws_optarg[0] != 'd') { - fprintf(stderr, "Bad argument for '-o': %s\n", ws_optarg); + cmdarg_err("Bad argument for '-o': %s", ws_optarg); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } switch (ws_optarg[0]) { case 'o': offset_base = 8; break; @@ -385,9 +387,9 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump case 'e': hdr_ethernet = TRUE; if (sscanf(ws_optarg, "%x", &hdr_ethernet_proto) < 1) { - fprintf(stderr, "Bad argument for '-e': %s\n", ws_optarg); + cmdarg_err("Bad argument for '-e': %s", ws_optarg); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } break; @@ -395,9 +397,9 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump hdr_ip_proto = strtol(ws_optarg, &p, 10); if (p == ws_optarg || *p != '\0' || hdr_ip_proto < 0 || hdr_ip_proto > 255) { - fprintf(stderr, "Bad argument for '-i': %s\n", ws_optarg); + cmdarg_err("Bad argument for '-i': %s", ws_optarg); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } hdr_ethernet = TRUE; break; @@ -409,35 +411,35 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump hdr_udp = FALSE; hdr_sctp_src = (guint32)strtol(ws_optarg, &p, 10); if (p == ws_optarg || (*p != ',' && *p != '\0')) { - fprintf(stderr, "Bad src port for '-%c'\n", c); + cmdarg_err("Bad src port for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } if (*p == '\0') { - fprintf(stderr, "No dest port specified for '-%c'\n", c); + cmdarg_err("No dest port specified for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } p++; ws_optarg = p; hdr_sctp_dest = (guint32)strtol(ws_optarg, &p, 10); if (p == ws_optarg || (*p != ',' && *p != '\0')) { - fprintf(stderr, "Bad dest port for '-s'\n"); + cmdarg_err("Bad dest port for '-s'"); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } if (*p == '\0') { - fprintf(stderr, "No tag specified for '-%c'\n", c); + cmdarg_err("No tag specified for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } p++; ws_optarg = p; hdr_sctp_tag = (guint32)strtol(ws_optarg, &p, 10); if (p == ws_optarg || *p != '\0') { - fprintf(stderr, "Bad tag for '-%c'\n", c); + cmdarg_err("Bad tag for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } hdr_ip_proto = 132; @@ -450,35 +452,35 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump hdr_udp = FALSE; hdr_sctp_src = (guint32)strtol(ws_optarg, &p, 10); if (p == ws_optarg || (*p != ',' && *p != '\0')) { - fprintf(stderr, "Bad src port for '-%c'\n", c); + cmdarg_err("Bad src port for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } if (*p == '\0') { - fprintf(stderr, "No dest port specified for '-%c'\n", c); + cmdarg_err("No dest port specified for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } p++; ws_optarg = p; hdr_sctp_dest = (guint32)strtol(ws_optarg, &p, 10); if (p == ws_optarg || (*p != ',' && *p != '\0')) { - fprintf(stderr, "Bad dest port for '-s'\n"); + cmdarg_err("Bad dest port for '-s'"); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } if (*p == '\0') { - fprintf(stderr, "No ppi specified for '-%c'\n", c); + cmdarg_err("No ppi specified for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } p++; ws_optarg = p; hdr_data_chunk_ppid = (guint32)strtoul(ws_optarg, &p, 10); if (p == ws_optarg || *p != '\0') { - fprintf(stderr, "Bad ppi for '-%c'\n", c); + cmdarg_err("Bad ppi for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } hdr_ip_proto = 132; @@ -498,22 +500,22 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump hdr_data_chunk = FALSE; hdr_src_port = (guint32)strtol(ws_optarg, &p, 10); if (p == ws_optarg || (*p != ',' && *p != '\0')) { - fprintf(stderr, "Bad src port for '-u'\n"); + cmdarg_err("Bad src port for '-u'"); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } if (*p == '\0') { - fprintf(stderr, "No dest port specified for '-u'\n"); + cmdarg_err("No dest port specified for '-u'"); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } p++; ws_optarg = p; hdr_dest_port = (guint32)strtol(ws_optarg, &p, 10); if (p == ws_optarg || *p != '\0') { - fprintf(stderr, "Bad dest port for '-u'\n"); + cmdarg_err("Bad dest port for '-u'"); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } hdr_ip_proto = 17; hdr_ethernet = TRUE; @@ -526,22 +528,22 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump hdr_data_chunk = FALSE; hdr_src_port = (guint32)strtol(ws_optarg, &p, 10); if (p == ws_optarg || (*p != ',' && *p != '\0')) { - fprintf(stderr, "Bad src port for '-T'\n"); + cmdarg_err("Bad src port for '-T'"); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } if (*p == '\0') { - fprintf(stderr, "No dest port specified for '-u'\n"); + cmdarg_err("No dest port specified for '-u'"); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } p++; ws_optarg = p; hdr_dest_port = (guint32)strtol(ws_optarg, &p, 10); if (p == ws_optarg || *p != '\0') { - fprintf(stderr, "Bad dest port for '-T'\n"); + cmdarg_err("Bad dest port for '-T'"); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } hdr_ip_proto = 6; hdr_ethernet = TRUE; @@ -561,9 +563,9 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump p = strchr(ws_optarg, ','); if (!p) { - fprintf(stderr, "Bad source param addr for '-%c'\n", c); + cmdarg_err("Bad source param addr for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } *p = '\0'; @@ -581,36 +583,36 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump if (hdr_ipv6 == TRUE) { if (!ws_inet_pton6(ws_optarg, &hdr_ipv6_src_addr)) { - fprintf(stderr, "Bad src addr -%c '%s'\n", c, p); + cmdarg_err("Bad src addr -%c '%s'", c, p); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } } else { if (!ws_inet_pton4(ws_optarg, &hdr_ip_src_addr)) { - fprintf(stderr, "Bad src addr -%c '%s'\n", c, p); + cmdarg_err("Bad src addr -%c '%s'", c, p); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } } p++; if (*p == '\0') { - fprintf(stderr, "No dest addr specified for '-%c'\n", c); + cmdarg_err("No dest addr specified for '-%c'", c); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } if (hdr_ipv6 == TRUE) { if (!ws_inet_pton6(p, &hdr_ipv6_dest_addr)) { - fprintf(stderr, "Bad dest addr for -%c '%s'\n", c, p); + cmdarg_err("Bad dest addr for -%c '%s'", c, p); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } } else { if (!ws_inet_pton4(p, &hdr_ip_dest_addr)) { - fprintf(stderr, "Bad dest addr for -%c '%s'\n", c, p); + cmdarg_err("Bad dest addr for -%c '%s'", c, p); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } } break; @@ -619,26 +621,26 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump case '?': default: print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } } if (ws_optind >= argc || argc-ws_optind < 2) { - fprintf(stderr, "Must specify input and output filename\n"); + cmdarg_err("Must specify input and output filename"); print_usage(stderr); - return EXIT_FAILURE; + return INVALID_OPTION; } if (max_offset > WTAP_MAX_PACKET_SIZE_STANDARD) { - fprintf(stderr, "Maximum packet length cannot be more than %d bytes\n", + cmdarg_err("Maximum packet length cannot be more than %d bytes", WTAP_MAX_PACKET_SIZE_STANDARD); - return EXIT_FAILURE; + return INVALID_OPTION; } /* Some validation */ if (pcap_link_type != 1 && hdr_ethernet) { - fprintf(stderr, "Dummy headers (-e, -i, -u, -s, -S -T) cannot be specified with link type override (-l)\n"); - return EXIT_FAILURE; + cmdarg_err("Dummy headers (-e, -i, -u, -s, -S -T) cannot be specified with link type override (-l)"); + return INVALID_OPTION; } if (hdr_ip_proto != -1 && !(hdr_ip || hdr_ipv6)) { @@ -648,8 +650,8 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump if (hdr_ip_proto == -1 && (hdr_ip || hdr_ipv6)) { /* if -4 or -6 option is specified without an IP protocol then fail */ - fprintf(stderr, "IP protocol requires a next layer protocol number\n"); - return EXIT_FAILURE; + cmdarg_err("IP protocol requires a next layer protocol number"); + return INVALID_OPTION; } if ((hdr_tcp || hdr_udp || hdr_sctp) && !(hdr_ip || hdr_ipv6)) { @@ -672,9 +674,8 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump input_filename = argv[ws_optind]; input_file = ws_fopen(input_filename, "rb"); if (!input_file) { - fprintf(stderr, "Cannot open file [%s] for reading: %s\n", - input_filename, g_strerror(errno)); - return EXIT_FAILURE; + open_failure_message(input_filename, errno, FALSE); + return OPEN_ERROR; } } else { input_filename = "Standard input"; @@ -693,8 +694,10 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump params->tsprec = WTAP_TSPREC_USEC; file_type_subtype = wtap_pcap_file_type_subtype(); } - if (write_file_header(params, file_type_subtype, interface_name) != EXIT_SUCCESS) { - return EXIT_FAILURE; + if ((ret = write_file_header(params, file_type_subtype, interface_name)) != EXIT_SUCCESS) { + g_free(params->idb_inf); + wtap_dump_params_cleanup(params); + return ret; } if (strcmp(argv[ws_optind+1], "-") != 0) { @@ -712,7 +715,7 @@ parse_options(int argc, char *argv[], text_import_info_t * const info, wtap_dump file_type_subtype); g_free(params->idb_inf); wtap_dump_params_cleanup(params); - return EXIT_FAILURE; + return OPEN_ERROR; } info->mode = TEXT_IMPORT_HEXDUMP; @@ -848,7 +851,7 @@ main(int argc, char *argv[]) ws_log_init("text2pcap", vcmdarg_err); /* Early logging command-line initialization. */ - ws_log_parse_args(&argc, argv, vcmdarg_err, 1); + ws_log_parse_args(&argc, argv, vcmdarg_err, INVALID_OPTION); #ifdef _WIN32 create_app_running_mutex(); @@ -859,17 +862,14 @@ main(int argc, char *argv[]) wtap_init(TRUE); memset(&info, 0, sizeof(info)); - if (parse_options(argc, argv, &info, ¶ms) != EXIT_SUCCESS) { - ret = EXIT_FAILURE; + if ((ret = parse_options(argc, argv, &info, ¶ms)) != EXIT_SUCCESS) { goto clean_exit; } - assert(input_file != NULL); + assert(input_file != NULL); assert(wdh != NULL); - if (text_import(&info) != EXIT_SUCCESS) { - ret = EXIT_FAILURE; - } + ret = text_import(&info); if (debug) fprintf(stderr, "\n-------------------------\n"); @@ -889,7 +889,7 @@ clean_exit: char *err_info; if (!wtap_dump_close(wdh, &err, &err_info)) { cfile_close_failure_message(output_filename, err, err_info); - ret = EXIT_FAILURE; + ret = 2; } g_free(params.idb_inf); }