From: German Service Network Date: Sat, 24 Jan 2026 07:06:09 +0000 (+0100) Subject: Move option parsing to a separate file fping.c and fping.h X-Git-Url: https://git.gsnw.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8626092d3ee141c0f824a7eeaa3080debf5ff83;p=fping.git Move option parsing to a separate file fping.c and fping.h --- diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bdb3df..9caef9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ Next - Move printing functions, stats functions (global stats) and function declarations to a separate file (#454, thanks @gsnw-sebast) - Avoid crash with option `-0` (#457, thanks @auerswal) +- Move option parsing to a separate file fping.c and fping.h (#458, thanks @gsnw-sebast) fping 5.5 (2025-12-31) ====================== diff --git a/src/Makefile.am b/src/Makefile.am index 7336192..30414c2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,7 @@ AM_CFLAGS = -Wall -Wextra -Wno-sign-compare sbin_PROGRAMS = fping -fping_SOURCES = fping.c output.c stats.c seqmap.c socket4.c fping.h options.h output.h stats.h seqmap.h optparse.c optparse.h +fping_SOURCES = fping.c flags.c output.c stats.c seqmap.c socket4.c fping.h flags.h options.h output.h stats.h seqmap.h optparse.c optparse.h fping_DEPENDENCIES = ../config.h if IPV6 diff --git a/src/flags.c b/src/flags.c new file mode 100644 index 0000000..2c491e1 --- /dev/null +++ b/src/flags.c @@ -0,0 +1,50 @@ +#include "flags.h" +#include "options.h" + +#include + +/* options with values */ +/* all time-related values are int64_t nanoseconds */ +unsigned int opt_retry = DEFAULT_RETRY; +int64_t opt_timeout = (int64_t)DEFAULT_TIMEOUT * 1000000; +int64_t opt_seqmap_timeout = (int64_t)DEFAULT_SEQMAP_TIMEOUT * 1000000; +int64_t opt_interval = (int64_t)DEFAULT_INTERVAL * 1000000; +int64_t opt_perhost_interval = (int64_t)DEFAULT_PERHOST_INTERVAL * 1000000; +float opt_backoff = DEFAULT_BACKOFF_FACTOR; +unsigned int opt_ping_data_size = DEFAULT_PING_DATA_SIZE; +unsigned int opt_count = 1; +unsigned int opt_min_reachable = 0; +unsigned int opt_ttl = 0; + +/* switches 0 = off 1 = on */ +int opt_version_on = 0; +int opt_verbose_on = 0; +int opt_unreachable_on = 0; +int opt_alive_on = 0; +int opt_quiet_on = 0; +int opt_elapsed_on = 0; +int opt_stats_on = 0; +int opt_cumulative_stats_on = 0; +int opt_generate_on = 0; /* flag for IP list generation */ +int opt_count_on = 0; +int opt_loop_on = 0; +int opt_print_netdata_on = 0; +int opt_print_json_on = 0; +int opt_print_tos_on = 0; +int opt_print_ttl_on = 0; +int opt_per_recv_on = 0; +int opt_report_all_rtts_on = 0; +int opt_name_on = 0; +int opt_addr_on = 0; +int opt_rdns_on = 0; +int opt_backoff_on = 0; +int opt_multif_on = 0; +int opt_timeout_on = 0; +int opt_fast_reachable_on = 0; +int opt_outage_on = 0; +int opt_random_data_on = 0; +int opt_check_source_on = 0; +int opt_size_on = 0; +int opt_timestamp_on = 0; +int opt_timestamp_format = 0; +int opt_icmp_request_typ = 0; \ No newline at end of file diff --git a/src/flags.h b/src/flags.h new file mode 100644 index 0000000..9ab7922 --- /dev/null +++ b/src/flags.h @@ -0,0 +1,56 @@ +#ifndef FLAGS_H +#define FLAGS_H + +#include + +/* sized so as to be like traditional ping */ +#define DEFAULT_PING_DATA_SIZE 56 + +/* options with values */ +/* all time-related values are int64_t nanoseconds */ +extern unsigned int opt_retry; +extern int64_t opt_timeout; +extern int64_t opt_seqmap_timeout; +extern int64_t opt_interval; +extern int64_t opt_perhost_interval; +extern float opt_backoff; +extern unsigned int opt_ping_data_size; +extern unsigned int opt_count; +extern unsigned int opt_min_reachable; +extern unsigned int opt_ttl; + +/* switches 0 = off 1 = on */ +extern int opt_print_json_on; +extern int opt_version_on; +extern int opt_verbose_on; +extern int opt_unreachable_on; +extern int opt_alive_on; +extern int opt_quiet_on; +extern int opt_elapsed_on; +extern int opt_stats_on; +extern int opt_cumulative_stats_on; +extern int opt_generate_on; +extern int opt_count_on; +extern int opt_loop_on; +extern int opt_print_netdata_on; +extern int opt_print_json_on; +extern int opt_print_tos_on; +extern int opt_print_ttl_on; +extern int opt_per_recv_on; +extern int opt_report_all_rtts_on; +extern int opt_name_on; +extern int opt_addr_on; +extern int opt_rdns_on; +extern int opt_backoff_on; +extern int opt_multif_on; +extern int opt_timeout_on; +extern int opt_fast_reachable_on; +extern int opt_outage_on; +extern int opt_random_data_on; +extern int opt_check_source_on; +extern int opt_size_on; +extern int opt_timestamp_on; +extern int opt_timestamp_format; +extern int opt_icmp_request_typ; + +#endif \ No newline at end of file diff --git a/src/fping.c b/src/fping.c index ab674a1..7c87538 100644 --- a/src/fping.c +++ b/src/fping.c @@ -36,6 +36,7 @@ extern "C" { #include "config.h" #include "fping.h" +#include "flags.h" #include "options.h" #include "optparse.h" @@ -146,9 +147,6 @@ extern int h_errno; #define MAX_GENERATE 131072 /* maximum number of hosts that -g can generate */ #define MAX_TARGET_NAME_LEN 255 /* maximum target name length read from file */ -/* sized so as to be like traditional ping */ -#define DEFAULT_PING_DATA_SIZE 56 - /* ICMP Timestamp has a fixed payload size of 12 bytes */ #define ICMP_TIMESTAMP_DATA_SIZE 12 @@ -304,17 +302,6 @@ volatile sig_atomic_t finish_requested = 0; unsigned int debugging = 0; -/* all time-related values are int64_t nanoseconds */ -unsigned int opt_retry = DEFAULT_RETRY; -int64_t opt_timeout = (int64_t)DEFAULT_TIMEOUT * 1000000; -int64_t opt_seqmap_timeout = (int64_t)DEFAULT_SEQMAP_TIMEOUT * 1000000; -int64_t opt_interval = (int64_t)DEFAULT_INTERVAL * 1000000; -int64_t opt_perhost_interval = (int64_t)DEFAULT_PERHOST_INTERVAL * 1000000; -float opt_backoff = DEFAULT_BACKOFF_FACTOR; -unsigned int opt_ping_data_size = DEFAULT_PING_DATA_SIZE; -unsigned int opt_count = 1, opt_min_reachable = 0; -unsigned int opt_ttl = 0; - unsigned int trials; int64_t report_interval = 0; int src_addr_set = 0; @@ -346,41 +333,7 @@ int64_t end_time; int64_t last_send_time; /* time last ping was sent */ int64_t next_report_time; /* time next -Q report is expected */ -/* switches */ -int opt_version_on = 0; - -int opt_verbose_on = 0, - opt_unreachable_on = 0, - opt_alive_on = 0, - opt_quiet_on = 0, - opt_elapsed_on = 0, - opt_stats_on = 0, - opt_cumulative_stats_on = 0; -int opt_generate_on = 0, /* flag for IP list generation */ - opt_count_on = 0, - opt_loop_on; -int opt_print_netdata_on = 0, - opt_print_json_on = 0, - opt_print_tos_on = 0, - opt_print_ttl_on = 0; -int opt_per_recv_on = 0, - opt_report_all_rtts_on = 0, - opt_name_on = 0, - opt_addr_on = 0, - opt_rdns_on = 0; -int opt_backoff_on = 0; -int opt_multif_on = 0, - opt_timeout_on = 0, - opt_fast_reachable_on = 0; -int opt_outage_on = 0, - opt_random_data_on = 0, - opt_check_source_on = 0, - opt_size_on = 0; - -int opt_timestamp_on = 0, - opt_timestamp_format = 0; - -int opt_icmp_request_typ = 0; + #if defined(DEBUG) || defined(_DEBUG) int opt_debug_randomly_lose_on, opt_debug_trace_on, opt_debug_print_per_system_on; int lose_factor; diff --git a/src/fping.h b/src/fping.h index fad6e7e..845fcaa 100644 --- a/src/fping.h +++ b/src/fping.h @@ -78,24 +78,6 @@ extern int num_alive, num_unreachable, num_noaddress, num_timeout; extern int num_pingsent, num_pingreceived, num_othericmprcvd; extern int64_t max_reply, min_reply, total_replies, sum_replies; -// Options -extern int opt_print_json_on; -extern int opt_timestamp_on; -extern int opt_timestamp_format; -extern int opt_alive_on; -extern int opt_quiet_on; -extern int opt_per_recv_on; -extern int opt_verbose_on; -extern int opt_print_tos_on; -extern int opt_print_ttl_on; -extern int opt_elapsed_on; -extern int opt_icmp_request_typ; -extern int opt_report_all_rtts_on; -extern int opt_outage_on; -extern int opt_cumulative_stats_on; -extern int opt_print_netdata_on; -extern int opt_random_data_on; - /* this requires variadic macros, part of C99 */ #if (defined(DEBUG) || defined(_DEBUG)) diff --git a/src/output.c b/src/output.c index c8eec90..b2640c8 100644 --- a/src/output.c +++ b/src/output.c @@ -1,5 +1,7 @@ #include "output.h" #include "fping.h" +#include "flags.h" + #include #include #include diff --git a/src/socket4.c b/src/socket4.c index 8a633a0..564791e 100644 --- a/src/socket4.c +++ b/src/socket4.c @@ -32,6 +32,7 @@ #include "config.h" #include "fping.h" +#include "flags.h" #include #include diff --git a/src/socket6.c b/src/socket6.c index 8176906..7f94bfb 100644 --- a/src/socket6.c +++ b/src/socket6.c @@ -32,6 +32,7 @@ #include "config.h" #include "fping.h" +#include "flags.h" #include #include diff --git a/src/stats.c b/src/stats.c index fd9bae0..d601b0d 100644 --- a/src/stats.c +++ b/src/stats.c @@ -1,6 +1,8 @@ #include "stats.h" -#include "output.h" #include "fping.h" +#include "flags.h" +#include "output.h" + #include #include