aboutsummaryrefslogtreecommitdiffstats
path: root/sgsnemu/cmdline.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2011-11-02 13:06:18 +0100
committerHarald Welte <laforge@gnumonks.org>2011-11-02 13:06:18 +0100
commitbed35df298f4914fabedfc7c9387af3f2f9a9e9f (patch)
tree0079fe22d0839637d8c777d2eebb91cd35b065c2 /sgsnemu/cmdline.c
parentca36f293648ee19056df7ea9a1cbfcc93c800dc8 (diff)
Convert all code to Linux coding style
After so many years of silence, we don't expect the original author to return to the project. To make things a bit simpler for us, we convert the coding style to what we are used to (Linux style). The conversion was made using the 'Lindent' script which is part of the Linux kernel.
Diffstat (limited to 'sgsnemu/cmdline.c')
-rw-r--r--sgsnemu/cmdline.c3449
1 files changed, 1810 insertions, 1639 deletions
diff --git a/sgsnemu/cmdline.c b/sgsnemu/cmdline.c
index 1c4c041..1ff1a59 100644
--- a/sgsnemu/cmdline.c
+++ b/sgsnemu/cmdline.c
@@ -23,1560 +23,1732 @@
const char *gengetopt_args_info_purpose = "";
-const char *gengetopt_args_info_usage = "Usage: " CMDLINE_PARSER_PACKAGE " [OPTIONS]...";
+const char *gengetopt_args_info_usage =
+ "Usage: " CMDLINE_PARSER_PACKAGE " [OPTIONS]...";
const char *gengetopt_args_info_help[] = {
- " -h, --help Print help and exit",
- " -V, --version Print version and exit",
- " -d, --debug Run in debug mode (default=off)",
- " -c, --conf=STRING Read configuration file",
- " --pidfile=STRING Filename of process id file (default=`./sgsnemu.pid')",
- " --statedir=STRING Directory of nonvolatile data (default=`./')",
- " --dns=STRING DNS Server to use",
- " -l, --listen=STRING Local interface",
- " -r, --remote=STRING Remote host",
- " --contexts=INT Number of contexts (default=`1')",
- " --timelimit=INT Exit after timelimit seconds (default=`0')",
- " --gtpversion=INT GTP version to use (default=`1')",
- " -a, --apn=STRING Access point name (default=`internet')",
- " --selmode=INT Selection mode (default=`0x01')",
- " --rattype=INT Radio Access Technology Type (optional-1to5)",
- " --userloc=STRING User Location Information (optional-type.MCC.MNC.LAC.CIorSACorRAC)",
- " --rai=STRING Routing Area Information (optional-MCC.MNC.LAC.RAC)",
- " --mstz=STRING MS Time Zone (optional- sign.NbQuartersOfAnHour.DSTAdjustment)",
- " --imeisv=STRING IMEI(SV) International Mobile Equipment Identity (and Software Version) (optional,16 digits)",
- " -i, --imsi=STRING IMSI (default=`240010123456789')",
- " --nsapi=INT NSAPI (default=`0')",
- " -m, --msisdn=STRING Mobile Station ISDN number (default=`46702123456')",
- " -q, --qos=INT Requested quality of service (default=`0x000b921f')",
- " --qose1=INT Requested quality of service Extension 1 (example=`0x9396404074f9ffff')",
- " --qose2=INT Requested quality of service Extension 2 (example=`0x11')",
- " --qose3=INT Requested quality of service Extension 3 (example=`0x0101')",
- " --qose4=INT Requested quality of service Extension 4 (example=`0x4040')",
- " --charging=INT Charging characteristics (default=`0x0800')",
- " -u, --uid=STRING Login user ID (default=`mig')",
- " -p, --pwd=STRING Login password (default=`hemmelig')",
- " --createif Create local network interface (default=off)",
- " -n, --net=STRING Network address for local interface",
- " --defaultroute Create default route (default=off)",
- " --ipup=STRING Script to run after link-up",
- " --ipdown=STRING Script to run after link-down",
- " --pinghost=STRING Ping remote host",
- " --pingrate=INT Number of ping req per second (default=`1')",
- " --pingsize=INT Number of ping data bytes (default=`56')",
- " --pingcount=INT Number of ping req to send (default=`0')",
- " --pingquiet Do not print ping packet info (default=off)",
- " --norecovery Do not send recovery (default=off)",
- 0
+ " -h, --help Print help and exit",
+ " -V, --version Print version and exit",
+ " -d, --debug Run in debug mode (default=off)",
+ " -c, --conf=STRING Read configuration file",
+ " --pidfile=STRING Filename of process id file (default=`./sgsnemu.pid')",
+ " --statedir=STRING Directory of nonvolatile data (default=`./')",
+ " --dns=STRING DNS Server to use",
+ " -l, --listen=STRING Local interface",
+ " -r, --remote=STRING Remote host",
+ " --contexts=INT Number of contexts (default=`1')",
+ " --timelimit=INT Exit after timelimit seconds (default=`0')",
+ " --gtpversion=INT GTP version to use (default=`1')",
+ " -a, --apn=STRING Access point name (default=`internet')",
+ " --selmode=INT Selection mode (default=`0x01')",
+ " --rattype=INT Radio Access Technology Type (optional-1to5)",
+ " --userloc=STRING User Location Information (optional-type.MCC.MNC.LAC.CIorSACorRAC)",
+ " --rai=STRING Routing Area Information (optional-MCC.MNC.LAC.RAC)",
+ " --mstz=STRING MS Time Zone (optional- sign.NbQuartersOfAnHour.DSTAdjustment)",
+ " --imeisv=STRING IMEI(SV) International Mobile Equipment Identity (and Software Version) (optional,16 digits)",
+ " -i, --imsi=STRING IMSI (default=`240010123456789')",
+ " --nsapi=INT NSAPI (default=`0')",
+ " -m, --msisdn=STRING Mobile Station ISDN number (default=`46702123456')",
+ " -q, --qos=INT Requested quality of service (default=`0x000b921f')",
+ " --qose1=INT Requested quality of service Extension 1 (example=`0x9396404074f9ffff')",
+ " --qose2=INT Requested quality of service Extension 2 (example=`0x11')",
+ " --qose3=INT Requested quality of service Extension 3 (example=`0x0101')",
+ " --qose4=INT Requested quality of service Extension 4 (example=`0x4040')",
+ " --charging=INT Charging characteristics (default=`0x0800')",
+ " -u, --uid=STRING Login user ID (default=`mig')",
+ " -p, --pwd=STRING Login password (default=`hemmelig')",
+ " --createif Create local network interface (default=off)",
+ " -n, --net=STRING Network address for local interface",
+ " --defaultroute Create default route (default=off)",
+ " --ipup=STRING Script to run after link-up",
+ " --ipdown=STRING Script to run after link-down",
+ " --pinghost=STRING Ping remote host",
+ " --pingrate=INT Number of ping req per second (default=`1')",
+ " --pingsize=INT Number of ping data bytes (default=`56')",
+ " --pingcount=INT Number of ping req to send (default=`0')",
+ " --pingquiet Do not print ping packet info (default=off)",
+ " --norecovery Do not send recovery (default=off)",
+ 0
};
static
-void clear_given (struct gengetopt_args_info *args_info);
+void clear_given(struct gengetopt_args_info *args_info);
static
-void clear_args (struct gengetopt_args_info *args_info);
+void clear_args(struct gengetopt_args_info *args_info);
static int
-cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required, const char *additional_error);
-
-struct line_list
-{
- char * string_arg;
- struct line_list * next;
+cmdline_parser_internal(int argc, char *const *argv,
+ struct gengetopt_args_info *args_info, int override,
+ int initialize, int check_required,
+ const char *additional_error);
+
+struct line_list {
+ char *string_arg;
+ struct line_list *next;
};
static struct line_list *cmd_line_list = 0;
static struct line_list *cmd_line_list_tmp = 0;
-static void
-free_cmd_list(void)
+static void free_cmd_list(void)
{
- /* free the list of a previous call */
- if (cmd_line_list)
- {
- while (cmd_line_list) {
- cmd_line_list_tmp = cmd_line_list;
- cmd_line_list = cmd_line_list->next;
- free (cmd_line_list_tmp->string_arg);
- free (cmd_line_list_tmp);
- }
- }
+ /* free the list of a previous call */
+ if (cmd_line_list) {
+ while (cmd_line_list) {
+ cmd_line_list_tmp = cmd_line_list;
+ cmd_line_list = cmd_line_list->next;
+ free(cmd_line_list_tmp->string_arg);
+ free(cmd_line_list_tmp);
+ }
+ }
}
-
-static char *
-gengetopt_strdup (const char *s);
+static char *gengetopt_strdup(const char *s);
static
-void clear_given (struct gengetopt_args_info *args_info)
+void clear_given(struct gengetopt_args_info *args_info)
{
- args_info->help_given = 0 ;
- args_info->version_given = 0 ;
- args_info->debug_given = 0 ;
- args_info->conf_given = 0 ;
- args_info->pidfile_given = 0 ;
- args_info->statedir_given = 0 ;
- args_info->dns_given = 0 ;
- args_info->listen_given = 0 ;
- args_info->remote_given = 0 ;
- args_info->contexts_given = 0 ;
- args_info->timelimit_given = 0 ;
- args_info->gtpversion_given = 0 ;
- args_info->apn_given = 0 ;
- args_info->selmode_given = 0 ;
- args_info->rattype_given = 0 ;
- args_info->userloc_given = 0 ;
- args_info->rai_given = 0 ;
- args_info->mstz_given = 0 ;
- args_info->imeisv_given = 0 ;
- args_info->imsi_given = 0 ;
- args_info->nsapi_given = 0 ;
- args_info->msisdn_given = 0 ;
- args_info->qos_given = 0 ;
- args_info->qose1_given = 0 ;
- args_info->qose2_given = 0 ;
- args_info->qose3_given = 0 ;
- args_info->qose4_given = 0 ;
- args_info->charging_given = 0 ;
- args_info->uid_given = 0 ;
- args_info->pwd_given = 0 ;
- args_info->createif_given = 0 ;
- args_info->net_given = 0 ;
- args_info->defaultroute_given = 0 ;
- args_info->ipup_given = 0 ;
- args_info->ipdown_given = 0 ;
- args_info->pinghost_given = 0 ;
- args_info->pingrate_given = 0 ;
- args_info->pingsize_given = 0 ;
- args_info->pingcount_given = 0 ;
- args_info->pingquiet_given = 0 ;
- args_info->norecovery_given = 0 ;
+ args_info->help_given = 0;
+ args_info->version_given = 0;
+ args_info->debug_given = 0;
+ args_info->conf_given = 0;
+ args_info->pidfile_given = 0;
+ args_info->statedir_given = 0;
+ args_info->dns_given = 0;
+ args_info->listen_given = 0;
+ args_info->remote_given = 0;
+ args_info->contexts_given = 0;
+ args_info->timelimit_given = 0;
+ args_info->gtpversion_given = 0;
+ args_info->apn_given = 0;
+ args_info->selmode_given = 0;
+ args_info->rattype_given = 0;
+ args_info->userloc_given = 0;
+ args_info->rai_given = 0;
+ args_info->mstz_given = 0;
+ args_info->imeisv_given = 0;
+ args_info->imsi_given = 0;
+ args_info->nsapi_given = 0;
+ args_info->msisdn_given = 0;
+ args_info->qos_given = 0;
+ args_info->qose1_given = 0;
+ args_info->qose2_given = 0;
+ args_info->qose3_given = 0;
+ args_info->qose4_given = 0;
+ args_info->charging_given = 0;
+ args_info->uid_given = 0;
+ args_info->pwd_given = 0;
+ args_info->createif_given = 0;
+ args_info->net_given = 0;
+ args_info->defaultroute_given = 0;
+ args_info->ipup_given = 0;
+ args_info->ipdown_given = 0;
+ args_info->pinghost_given = 0;
+ args_info->pingrate_given = 0;
+ args_info->pingsize_given = 0;
+ args_info->pingcount_given = 0;
+ args_info->pingquiet_given = 0;
+ args_info->norecovery_given = 0;
}
static
-void clear_args (struct gengetopt_args_info *args_info)
+void clear_args(struct gengetopt_args_info *args_info)
{
- args_info->debug_flag = 0;
- args_info->conf_arg = NULL;
- args_info->conf_orig = NULL;
- args_info->pidfile_arg = gengetopt_strdup ("./sgsnemu.pid");
- args_info->pidfile_orig = NULL;
- args_info->statedir_arg = gengetopt_strdup ("./");
- args_info->statedir_orig = NULL;
- args_info->dns_arg = NULL;
- args_info->dns_orig = NULL;
- args_info->listen_arg = NULL;
- args_info->listen_orig = NULL;
- args_info->remote_arg = NULL;
- args_info->remote_orig = NULL;
- args_info->contexts_arg = 1;
- args_info->contexts_orig = NULL;
- args_info->timelimit_arg = 0;
- args_info->timelimit_orig = NULL;
- args_info->gtpversion_arg = 1;
- args_info->gtpversion_orig = NULL;
- args_info->apn_arg = gengetopt_strdup ("internet");
- args_info->apn_orig = NULL;
- args_info->selmode_arg = 0x01;
- args_info->selmode_orig = NULL;
- args_info->rattype_arg = "1";
- args_info->rattype_orig = NULL;
- args_info->userloc_arg = strdup("02509946241207");
- args_info->userloc_orig = NULL;
- args_info->rai_arg = strdup("02509946241207");
- args_info->rai_orig = NULL;
- args_info->mstz_arg = strdup("0");
- args_info->mstz_orig = NULL;
- args_info->imeisv_arg = strdup("2143658709214365");
- args_info->imeisv_orig = NULL;
- args_info->imsi_arg = gengetopt_strdup ("240010123456789");
- args_info->imsi_orig = NULL;
- args_info->nsapi_arg = 0;
- args_info->nsapi_orig = NULL;
- args_info->msisdn_arg = gengetopt_strdup ("46702123456");
- args_info->msisdn_orig = NULL;
- args_info->qos_arg = 0x000b921f;
- args_info->qos_orig = NULL;
- args_info->qose1_arg = 0x9396404074f9ffff;
- args_info->qose1_orig = NULL;
- args_info->qose2_arg = 0x11;
- args_info->qose2_orig = NULL;
- args_info->qose3_arg = 0x0101;
- args_info->qose3_orig = NULL;
- args_info->qose4_arg = 0x4040;
- args_info->qose4_orig = NULL;
- args_info->charging_arg = 0x0800;
- args_info->charging_orig = NULL;
- args_info->uid_arg = gengetopt_strdup ("mig");
- args_info->uid_orig = NULL;
- args_info->pwd_arg = gengetopt_strdup ("hemmelig");
- args_info->pwd_orig = NULL;
- args_info->createif_flag = 0;
- args_info->net_arg = NULL;
- args_info->net_orig = NULL;
- args_info->defaultroute_flag = 0;
- args_info->ipup_arg = NULL;
- args_info->ipup_orig = NULL;
- args_info->ipdown_arg = NULL;
- args_info->ipdown_orig = NULL;
- args_info->pinghost_arg = NULL;
- args_info->pinghost_orig = NULL;
- args_info->pingrate_arg = 1;
- args_info->pingrate_orig = NULL;
- args_info->pingsize_arg = 56;
- args_info->pingsize_orig = NULL;
- args_info->pingcount_arg = 0;
- args_info->pingcount_orig = NULL;
- args_info->pingquiet_flag = 0;
- args_info->norecovery_flag = 0;
-
+ args_info->debug_flag = 0;
+ args_info->conf_arg = NULL;
+ args_info->conf_orig = NULL;
+ args_info->pidfile_arg = gengetopt_strdup("./sgsnemu.pid");
+ args_info->pidfile_orig = NULL;
+ args_info->statedir_arg = gengetopt_strdup("./");
+ args_info->statedir_orig = NULL;
+ args_info->dns_arg = NULL;
+ args_info->dns_orig = NULL;
+ args_info->listen_arg = NULL;
+ args_info->listen_orig = NULL;
+ args_info->remote_arg = NULL;
+ args_info->remote_orig = NULL;
+ args_info->contexts_arg = 1;
+ args_info->contexts_orig = NULL;
+ args_info->timelimit_arg = 0;
+ args_info->timelimit_orig = NULL;
+ args_info->gtpversion_arg = 1;
+ args_info->gtpversion_orig = NULL;
+ args_info->apn_arg = gengetopt_strdup("internet");
+ args_info->apn_orig = NULL;
+ args_info->selmode_arg = 0x01;
+ args_info->selmode_orig = NULL;
+ args_info->rattype_arg = "1";
+ args_info->rattype_orig = NULL;
+ args_info->userloc_arg = strdup("02509946241207");
+ args_info->userloc_orig = NULL;
+ args_info->rai_arg = strdup("02509946241207");
+ args_info->rai_orig = NULL;
+ args_info->mstz_arg = strdup("0");
+ args_info->mstz_orig = NULL;
+ args_info->imeisv_arg = strdup("2143658709214365");
+ args_info->imeisv_orig = NULL;
+ args_info->imsi_arg = gengetopt_strdup("240010123456789");
+ args_info->imsi_orig = NULL;
+ args_info->nsapi_arg = 0;
+ args_info->nsapi_orig = NULL;
+ args_info->msisdn_arg = gengetopt_strdup("46702123456");
+ args_info->msisdn_orig = NULL;
+ args_info->qos_arg = 0x000b921f;
+ args_info->qos_orig = NULL;
+ args_info->qose1_arg = 0x9396404074f9ffff;
+ args_info->qose1_orig = NULL;
+ args_info->qose2_arg = 0x11;
+ args_info->qose2_orig = NULL;
+ args_info->qose3_arg = 0x0101;
+ args_info->qose3_orig = NULL;
+ args_info->qose4_arg = 0x4040;
+ args_info->qose4_orig = NULL;
+ args_info->charging_arg = 0x0800;
+ args_info->charging_orig = NULL;
+ args_info->uid_arg = gengetopt_strdup("mig");
+ args_info->uid_orig = NULL;
+ args_info->pwd_arg = gengetopt_strdup("hemmelig");
+ args_info->pwd_orig = NULL;
+ args_info->createif_flag = 0;
+ args_info->net_arg = NULL;
+ args_info->net_orig = NULL;
+ args_info->defaultroute_flag = 0;
+ args_info->ipup_arg = NULL;
+ args_info->ipup_orig = NULL;
+ args_info->ipdown_arg = NULL;
+ args_info->ipdown_orig = NULL;
+ args_info->pinghost_arg = NULL;
+ args_info->pinghost_orig = NULL;
+ args_info->pingrate_arg = 1;
+ args_info->pingrate_orig = NULL;
+ args_info->pingsize_arg = 56;
+ args_info->pingsize_orig = NULL;
+ args_info->pingcount_arg = 0;
+ args_info->pingcount_orig = NULL;
+ args_info->pingquiet_flag = 0;
+ args_info->norecovery_flag = 0;
+
}
static
void init_args_info(struct gengetopt_args_info *args_info)
{
- args_info->help_help = gengetopt_args_info_help[0] ;
- args_info->version_help = gengetopt_args_info_help[1] ;
- args_info->debug_help = gengetopt_args_info_help[2] ;
- args_info->conf_help = gengetopt_args_info_help[3] ;
- args_info->pidfile_help = gengetopt_args_info_help[4] ;
- args_info->statedir_help = gengetopt_args_info_help[5] ;
- args_info->dns_help = gengetopt_args_info_help[6] ;
- args_info->listen_help = gengetopt_args_info_help[7] ;
- args_info->remote_help = gengetopt_args_info_help[8] ;
- args_info->contexts_help = gengetopt_args_info_help[9] ;
- args_info->timelimit_help = gengetopt_args_info_help[10] ;
- args_info->gtpversion_help = gengetopt_args_info_help[11] ;
- args_info->apn_help = gengetopt_args_info_help[12] ;
- args_info->selmode_help = gengetopt_args_info_help[13] ;
- args_info->imsi_help = gengetopt_args_info_help[14] ;
- args_info->nsapi_help = gengetopt_args_info_help[15] ;
- args_info->msisdn_help = gengetopt_args_info_help[16] ;
- args_info->qos_help = gengetopt_args_info_help[17] ;
- args_info->charging_help = gengetopt_args_info_help[18] ;
- args_info->uid_help = gengetopt_args_info_help[19] ;
- args_info->pwd_help = gengetopt_args_info_help[20] ;
- args_info->createif_help = gengetopt_args_info_help[21] ;
- args_info->net_help = gengetopt_args_info_help[22] ;
- args_info->defaultroute_help = gengetopt_args_info_help[23] ;
- args_info->ipup_help = gengetopt_args_info_help[24] ;
- args_info->ipdown_help = gengetopt_args_info_help[25] ;
- args_info->pinghost_help = gengetopt_args_info_help[26] ;
- args_info->pingrate_help = gengetopt_args_info_help[27] ;
- args_info->pingsize_help = gengetopt_args_info_help[28] ;
- args_info->pingcount_help = gengetopt_args_info_help[29] ;
- args_info->pingquiet_help = gengetopt_args_info_help[30] ;
- args_info->norecovery_help = gengetopt_args_info_help[31] ;
-
+ args_info->help_help = gengetopt_args_info_help[0];
+ args_info->version_help = gengetopt_args_info_help[1];
+ args_info->debug_help = gengetopt_args_info_help[2];
+ args_info->conf_help = gengetopt_args_info_help[3];
+ args_info->pidfile_help = gengetopt_args_info_help[4];
+ args_info->statedir_help = gengetopt_args_info_help[5];
+ args_info->dns_help = gengetopt_args_info_help[6];
+ args_info->listen_help = gengetopt_args_info_help[7];
+ args_info->remote_help = gengetopt_args_info_help[8];
+ args_info->contexts_help = gengetopt_args_info_help[9];
+ args_info->timelimit_help = gengetopt_args_info_help[10];
+ args_info->gtpversion_help = gengetopt_args_info_help[11];
+ args_info->apn_help = gengetopt_args_info_help[12];
+ args_info->selmode_help = gengetopt_args_info_help[13];
+ args_info->imsi_help = gengetopt_args_info_help[14];
+ args_info->nsapi_help = gengetopt_args_info_help[15];
+ args_info->msisdn_help = gengetopt_args_info_help[16];
+ args_info->qos_help = gengetopt_args_info_help[17];
+ args_info->charging_help = gengetopt_args_info_help[18];
+ args_info->uid_help = gengetopt_args_info_help[19];
+ args_info->pwd_help = gengetopt_args_info_help[20];
+ args_info->createif_help = gengetopt_args_info_help[21];
+ args_info->net_help = gengetopt_args_info_help[22];
+ args_info->defaultroute_help = gengetopt_args_info_help[23];
+ args_info->ipup_help = gengetopt_args_info_help[24];
+ args_info->ipdown_help = gengetopt_args_info_help[25];
+ args_info->pinghost_help = gengetopt_args_info_help[26];
+ args_info->pingrate_help = gengetopt_args_info_help[27];
+ args_info->pingsize_help = gengetopt_args_info_help[28];
+ args_info->pingcount_help = gengetopt_args_info_help[29];
+ args_info->pingquiet_help = gengetopt_args_info_help[30];
+ args_info->norecovery_help = gengetopt_args_info_help[31];
+
}
-void
-cmdline_parser_print_version (void)
+void cmdline_parser_print_version(void)
{
- printf ("%s %s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION);
+ printf("%s %s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION);
}
-void
-cmdline_parser_print_help (void)
+void cmdline_parser_print_help(void)
{
- int i = 0;
- cmdline_parser_print_version ();
+ int i = 0;
+ cmdline_parser_print_version();
- if (strlen(gengetopt_args_info_purpose) > 0)
- printf("\n%s\n", gengetopt_args_info_purpose);
+ if (strlen(gengetopt_args_info_purpose) > 0)
+ printf("\n%s\n", gengetopt_args_info_purpose);
- printf("\n%s\n\n", gengetopt_args_info_usage);
- while (gengetopt_args_info_help[i])
- printf("%s\n", gengetopt_args_info_help[i++]);
+ printf("\n%s\n\n", gengetopt_args_info_usage);
+ while (gengetopt_args_info_help[i])
+ printf("%s\n", gengetopt_args_info_help[i++]);
}
-void
-cmdline_parser_init (struct gengetopt_args_info *args_info)
+void cmdline_parser_init(struct gengetopt_args_info *args_info)
{
- clear_given (args_info);
- clear_args (args_info);
- init_args_info (args_info);
+ clear_given(args_info);
+ clear_args(args_info);
+ init_args_info(args_info);
}
-static void
-cmdline_parser_release (struct gengetopt_args_info *args_info)
+static void cmdline_parser_release(struct gengetopt_args_info *args_info)
{
-
- if (args_info->conf_arg)
- {
- free (args_info->conf_arg); /* free previous argument */
- args_info->conf_arg = 0;
- }
- if (args_info->conf_orig)
- {
- free (args_info->conf_orig); /* free previous argument */
- args_info->conf_orig = 0;
- }
- if (args_info->pidfile_arg)
- {
- free (args_info->pidfile_arg); /* free previous argument */
- args_info->pidfile_arg = 0;
- }
- if (args_info->pidfile_orig)
- {
- free (args_info->pidfile_orig); /* free previous argument */
- args_info->pidfile_orig = 0;
- }
- if (args_info->statedir_arg)
- {
- free (args_info->statedir_arg); /* free previous argument */
- args_info->statedir_arg = 0;
- }
- if (args_info->statedir_orig)
- {
- free (args_info->statedir_orig); /* free previous argument */
- args_info->statedir_orig = 0;
- }
- if (args_info->dns_arg)
- {
- free (args_info->dns_arg); /* free previous argument */
- args_info->dns_arg = 0;
- }
- if (args_info->dns_orig)
- {
- free (args_info->dns_orig); /* free previous argument */
- args_info->dns_orig = 0;
- }
- if (args_info->listen_arg)
- {
- free (args_info->listen_arg); /* free previous argument */
- args_info->listen_arg = 0;
- }
- if (args_info->listen_orig)
- {
- free (args_info->listen_orig); /* free previous argument */
- args_info->listen_orig = 0;
- }
- if (args_info->remote_arg)
- {
- free (args_info->remote_arg); /* free previous argument */
- args_info->remote_arg = 0;
- }
- if (args_info->remote_orig)
- {
- free (args_info->remote_orig); /* free previous argument */
- args_info->remote_orig = 0;
- }
- if (args_info->contexts_orig)
- {
- free (args_info->contexts_orig); /* free previous argument */
- args_info->contexts_orig = 0;
- }
- if (args_info->timelimit_orig)
- {
- free (args_info->timelimit_orig); /* free previous argument */
- args_info->timelimit_orig = 0;
- }
- if (args_info->gtpversion_orig)
- {
- free (args_info->gtpversion_orig); /* free previous argument */
- args_info->gtpversion_orig = 0;
- }
- if (args_info->apn_arg)
- {
- free (args_info->apn_arg); /* free previous argument */
- args_info->apn_arg = 0;
- }
- if (args_info->apn_orig)
- {
- free (args_info->apn_orig); /* free previous argument */
- args_info->apn_orig = 0;
- }
- if (args_info->selmode_orig)
- {
- free (args_info->selmode_orig); /* free previous argument */
- args_info->selmode_orig = 0;
- }
- if (args_info->imsi_arg)
- {
- free (args_info->imsi_arg); /* free previous argument */
- args_info->imsi_arg = 0;
- }
- if (args_info->imsi_orig)
- {
- free (args_info->imsi_orig); /* free previous argument */
- args_info->imsi_orig = 0;
- }
- if (args_info->nsapi_orig)
- {
- free (args_info->nsapi_orig); /* free previous argument */
- args_info->nsapi_orig = 0;
- }
- if (args_info->msisdn_arg)
- {
- free (args_info->msisdn_arg); /* free previous argument */
- args_info->msisdn_arg = 0;
- }
- if (args_info->msisdn_orig)
- {
- free (args_info->msisdn_orig); /* free previous argument */
- args_info->msisdn_orig = 0;
- }
- if (args_info->qos_orig)
- {
- free (args_info->qos_orig); /* free previous argument */
- args_info->qos_orig = 0;
- }
- if (args_info->charging_orig)
- {
- free (args_info->charging_orig); /* free previous argument */
- args_info->charging_orig = 0;
- }
- if (args_info->uid_arg)
- {
- free (args_info->uid_arg); /* free previous argument */
- args_info->uid_arg = 0;
- }
- if (args_info->uid_orig)
- {
- free (args_info->uid_orig); /* free previous argument */
- args_info->uid_orig = 0;
- }
- if (args_info->pwd_arg)
- {
- free (args_info->pwd_arg); /* free previous argument */
- args_info->pwd_arg = 0;
- }
- if (args_info->pwd_orig)
- {
- free (args_info->pwd_orig); /* free previous argument */
- args_info->pwd_orig = 0;
- }
- if (args_info->net_arg)
- {
- free (args_info->net_arg); /* free previous argument */
- args_info->net_arg = 0;
- }
- if (args_info->net_orig)
- {
- free (args_info->net_orig); /* free previous argument */
- args_info->net_orig = 0;
- }
- if (args_info->ipup_arg)
- {
- free (args_info->ipup_arg); /* free previous argument */
- args_info->ipup_arg = 0;
- }
- if (args_info->ipup_orig)
- {
- free (args_info->ipup_orig); /* free previous argument */
- args_info->ipup_orig = 0;
- }
- if (args_info->ipdown_arg)
- {
- free (args_info->ipdown_arg); /* free previous argument */
- args_info->ipdown_arg = 0;
- }
- if (args_info->ipdown_orig)
- {
- free (args_info->ipdown_orig); /* free previous argument */
- args_info->ipdown_orig = 0;
- }
- if (args_info->pinghost_arg)
- {
- free (args_info->pinghost_arg); /* free previous argument */
- args_info->pinghost_arg = 0;
- }
- if (args_info->pinghost_orig)
- {
- free (args_info->pinghost_orig); /* free previous argument */
- args_info->pinghost_orig = 0;
- }
- if (args_info->pingrate_orig)
- {
- free (args_info->pingrate_orig); /* free previous argument */
- args_info->pingrate_orig = 0;
- }
- if (args_info->pingsize_orig)
- {
- free (args_info->pingsize_orig); /* free previous argument */
- args_info->pingsize_orig = 0;
- }
- if (args_info->pingcount_orig)
- {
- free (args_info->pingcount_orig); /* free previous argument */
- args_info->pingcount_orig = 0;
- }
-
- clear_given (args_info);
+
+ if (args_info->conf_arg) {
+ free(args_info->conf_arg); /* free previous argument */
+ args_info->conf_arg = 0;
+ }
+ if (args_info->conf_orig) {
+ free(args_info->conf_orig); /* free previous argument */
+ args_info->conf_orig = 0;
+ }
+ if (args_info->pidfile_arg) {
+ free(args_info->pidfile_arg); /* free previous argument */
+ args_info->pidfile_arg = 0;
+ }
+ if (args_info->pidfile_orig) {
+ free(args_info->pidfile_orig); /* free previous argument */
+ args_info->pidfile_orig = 0;
+ }
+ if (args_info->statedir_arg) {
+ free(args_info->statedir_arg); /* free previous argument */
+ args_info->statedir_arg = 0;
+ }
+ if (args_info->statedir_orig) {
+ free(args_info->statedir_orig); /* free previous argument */
+ args_info->statedir_orig = 0;
+ }
+ if (args_info->dns_arg) {
+ free(args_info->dns_arg); /* free previous argument */
+ args_info->dns_arg = 0;
+ }
+ if (args_info->dns_orig) {
+ free(args_info->dns_orig); /* free previous argument */
+ args_info->dns_orig = 0;
+ }
+ if (args_info->listen_arg) {
+ free(args_info->listen_arg); /* free previous argument */
+ args_info->listen_arg = 0;
+ }
+ if (args_info->listen_orig) {
+ free(args_info->listen_orig); /* free previous argument */
+ args_info->listen_orig = 0;
+ }
+ if (args_info->remote_arg) {
+ free(args_info->remote_arg); /* free previous argument */
+ args_info->remote_arg = 0;
+ }
+ if (args_info->remote_orig) {
+ free(args_info->remote_orig); /* free previous argument */
+ args_info->remote_orig = 0;
+ }
+ if (args_info->contexts_orig) {
+ free(args_info->contexts_orig); /* free previous argument */
+ args_info->contexts_orig = 0;
+ }
+ if (args_info->timelimit_orig) {
+ free(args_info->timelimit_orig); /* free previous argument */
+ args_info->timelimit_orig = 0;
+ }
+ if (args_info->gtpversion_orig) {
+ free(args_info->gtpversion_orig); /* free previous argument */
+ args_info->gtpversion_orig = 0;
+ }
+ if (args_info->apn_arg) {
+ free(args_info->apn_arg); /* free previous argument */
+ args_info->apn_arg = 0;
+ }
+ if (args_info->apn_orig) {
+ free(args_info->apn_orig); /* free previous argument */
+ args_info->apn_orig = 0;
+ }
+ if (args_info->selmode_orig) {
+ free(args_info->selmode_orig); /* free previous argument */
+ args_info->selmode_orig = 0;
+ }
+ if (args_info->imsi_arg) {
+ free(args_info->imsi_arg); /* free previous argument */
+ args_info->imsi_arg = 0;
+ }
+ if (args_info->imsi_orig) {
+ free(args_info->imsi_orig); /* free previous argument */
+ args_info->imsi_orig = 0;
+ }
+ if (args_info->nsapi_orig) {
+ free(args_info->nsapi_orig); /* free previous argument */
+ args_info->nsapi_orig = 0;
+ }
+ if (args_info->msisdn_arg) {
+ free(args_info->msisdn_arg); /* free previous argument */
+ args_info->msisdn_arg = 0;
+ }
+ if (args_info->msisdn_orig) {
+ free(args_info->msisdn_orig); /* free previous argument */
+ args_info->msisdn_orig = 0;
+ }
+ if (args_info->qos_orig) {
+ free(args_info->qos_orig); /* free previous argument */
+ args_info->qos_orig = 0;
+ }
+ if (args_info->charging_orig) {
+ free(args_info->charging_orig); /* free previous argument */
+ args_info->charging_orig = 0;
+ }
+ if (args_info->uid_arg) {
+ free(args_info->uid_arg); /* free previous argument */
+ args_info->uid_arg = 0;
+ }
+ if (args_info->uid_orig) {
+ free(args_info->uid_orig); /* free previous argument */
+ args_info->uid_orig = 0;
+ }
+ if (args_info->pwd_arg) {
+ free(args_info->pwd_arg); /* free previous argument */
+ args_info->pwd_arg = 0;
+ }
+ if (args_info->pwd_orig) {
+ free(args_info->pwd_orig); /* free previous argument */
+ args_info->pwd_orig = 0;
+ }
+ if (args_info->net_arg) {
+ free(args_info->net_arg); /* free previous argument */
+ args_info->net_arg = 0;
+ }
+ if (args_info->net_orig) {
+ free(args_info->net_orig); /* free previous argument */
+ args_info->net_orig = 0;
+ }
+ if (args_info->ipup_arg) {
+ free(args_info->ipup_arg); /* free previous argument */
+ args_info->ipup_arg = 0;
+ }
+ if (args_info->ipup_orig) {
+ free(args_info->ipup_orig); /* free previous argument */
+ args_info->ipup_orig = 0;
+ }
+ if (args_info->ipdown_arg) {
+ free(args_info->ipdown_arg); /* free previous argument */
+ args_info->ipdown_arg = 0;
+ }
+ if (args_info->ipdown_orig) {
+ free(args_info->ipdown_orig); /* free previous argument */
+ args_info->ipdown_orig = 0;
+ }
+ if (args_info->pinghost_arg) {
+ free(args_info->pinghost_arg); /* free previous argument */
+ args_info->pinghost_arg = 0;
+ }
+ if (args_info->pinghost_orig) {
+ free(args_info->pinghost_orig); /* free previous argument */
+ args_info->pinghost_orig = 0;
+ }
+ if (args_info->pingrate_orig) {
+ free(args_info->pingrate_orig); /* free previous argument */
+ args_info->pingrate_orig = 0;
+ }
+ if (args_info->pingsize_orig) {
+ free(args_info->pingsize_orig); /* free previous argument */
+ args_info->pingsize_orig = 0;
+ }
+ if (args_info->pingcount_orig) {
+ free(args_info->pingcount_orig); /* free previous argument */
+ args_info->pingcount_orig = 0;
+ }
+
+ clear_given(args_info);
}
int
-cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info)
+cmdline_parser_file_save(const char *filename,
+ struct gengetopt_args_info *args_info)
{
- FILE *outfile;
- int i = 0;
-
- outfile = fopen(filename, "w");
-
- if (!outfile)
- {
- fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename);
- return EXIT_FAILURE;
- }
-
- if (args_info->help_given) {
- fprintf(outfile, "%s\n", "help");
- }
- if (args_info->version_given) {
- fprintf(outfile, "%s\n", "version");
- }
- if (args_info->debug_given) {
- fprintf(outfile, "%s\n", "debug");
- }
- if (args_info->conf_given) {
- if (args_info->conf_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "conf", args_info->conf_orig);
- } else {
- fprintf(outfile, "%s\n", "conf");
- }
- }
- if (args_info->pidfile_given) {
- if (args_info->pidfile_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "pidfile", args_info->pidfile_orig);
- } else {
- fprintf(outfile, "%s\n", "pidfile");
- }
- }
- if (args_info->statedir_given) {
- if (args_info->statedir_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "statedir", args_info->statedir_orig);
- } else {
- fprintf(outfile, "%s\n", "statedir");
- }
- }
- if (args_info->dns_given) {
- if (args_info->dns_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "dns", args_info->dns_orig);
- } else {
- fprintf(outfile, "%s\n", "dns");
- }
- }
- if (args_info->listen_given) {
- if (args_info->listen_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "listen", args_info->listen_orig);
- } else {
- fprintf(outfile, "%s\n", "listen");
- }
- }
- if (args_info->remote_given) {
- if (args_info->remote_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "remote", args_info->remote_orig);
- } else {
- fprintf(outfile, "%s\n", "remote");
- }
- }
- if (args_info->contexts_given) {
- if (args_info->contexts_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "contexts", args_info->contexts_orig);
- } else {
- fprintf(outfile, "%s\n", "contexts");
- }
- }
- if (args_info->timelimit_given) {
- if (args_info->timelimit_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "timelimit", args_info->timelimit_orig);
- } else {
- fprintf(outfile, "%s\n", "timelimit");
- }
- }
- if (args_info->gtpversion_given) {
- if (args_info->gtpversion_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "gtpversion", args_info->gtpversion_orig);
- } else {
- fprintf(outfile, "%s\n", "gtpversion");
- }
- }
- if (args_info->apn_given) {
- if (args_info->apn_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "apn", args_info->apn_orig);
- } else {
- fprintf(outfile, "%s\n", "apn");
- }
- }
- if (args_info->selmode_given) {
- if (args_info->selmode_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "selmode", args_info->selmode_orig);
- } else {
- fprintf(outfile, "%s\n", "selmode");
- }
- }
- if (args_info->imsi_given) {
- if (args_info->imsi_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "imsi", args_info->imsi_orig);
- } else {
- fprintf(outfile, "%s\n", "imsi");
- }
- }
- if (args_info->nsapi_given) {
- if (args_info->nsapi_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "nsapi", args_info->nsapi_orig);
- } else {
- fprintf(outfile, "%s\n", "nsapi");
- }
- }
- if (args_info->msisdn_given) {
- if (args_info->msisdn_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "msisdn", args_info->msisdn_orig);
- } else {
- fprintf(outfile, "%s\n", "msisdn");
- }
- }
- if (args_info->qos_given) {
- if (args_info->qos_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "qos", args_info->qos_orig);
- } else {
- fprintf(outfile, "%s\n", "qos");
- }
- }
- if (args_info->charging_given) {
- if (args_info->charging_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "charging", args_info->charging_orig);
- } else {
- fprintf(outfile, "%s\n", "charging");
- }
- }
- if (args_info->uid_given) {
- if (args_info->uid_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "uid", args_info->uid_orig);
- } else {
- fprintf(outfile, "%s\n", "uid");
- }
- }
- if (args_info->pwd_given) {
- if (args_info->pwd_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "pwd", args_info->pwd_orig);
- } else {
- fprintf(outfile, "%s\n", "pwd");
- }
- }
- if (args_info->createif_given) {
- fprintf(outfile, "%s\n", "createif");
- }
- if (args_info->net_given) {
- if (args_info->net_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "net", args_info->net_orig);
- } else {
- fprintf(outfile, "%s\n", "net");
- }
- }
- if (args_info->defaultroute_given) {
- fprintf(outfile, "%s\n", "defaultroute");
- }
- if (args_info->ipup_given) {
- if (args_info->ipup_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "ipup", args_info->ipup_orig);
- } else {
- fprintf(outfile, "%s\n", "ipup");
- }
- }
- if (args_info->ipdown_given) {
- if (args_info->ipdown_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "ipdown", args_info->ipdown_orig);
- } else {
- fprintf(outfile, "%s\n", "ipdown");
- }
- }
- if (args_info->pinghost_given) {
- if (args_info->pinghost_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "pinghost", args_info->pinghost_orig);
- } else {
- fprintf(outfile, "%s\n", "pinghost");
- }
- }
- if (args_info->pingrate_given) {
- if (args_info->pingrate_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "pingrate", args_info->pingrate_orig);
- } else {
- fprintf(outfile, "%s\n", "pingrate");
- }
- }
- if (args_info->pingsize_given) {
- if (args_info->pingsize_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "pingsize", args_info->pingsize_orig);
- } else {
- fprintf(outfile, "%s\n", "pingsize");
- }
- }
- if (args_info->pingcount_given) {
- if (args_info->pingcount_orig) {
- fprintf(outfile, "%s=\"%s\"\n", "pingcount", args_info->pingcount_orig);
- } else {
- fprintf(outfile, "%s\n", "pingcount");
- }
- }
- if (args_info->pingquiet_given) {
- fprintf(outfile, "%s\n", "pingquiet");
- }
- if (args_info->norecovery_given) {
- fprintf(outfile, "%s\n", "norecovery");
- }
-
- fclose (outfile);
-
- i = EXIT_SUCCESS;
- return i;
+ FILE *outfile;
+ int i = 0;
+
+ outfile = fopen(filename, "w");
+
+ if (!outfile) {
+ fprintf(stderr, "%s: cannot open file for writing: %s\n",
+ CMDLINE_PARSER_PACKAGE, filename);
+ return EXIT_FAILURE;
+ }
+
+ if (args_info->help_given) {
+ fprintf(outfile, "%s\n", "help");
+ }
+ if (args_info->version_given) {
+ fprintf(outfile, "%s\n", "version");
+ }
+ if (args_info->debug_given) {
+ fprintf(outfile, "%s\n", "debug");
+ }
+ if (args_info->conf_given) {
+ if (args_info->conf_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "conf",
+ args_info->conf_orig);
+ } else {
+ fprintf(outfile, "%s\n", "conf");
+ }
+ }
+ if (args_info->pidfile_given) {
+ if (args_info->pidfile_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "pidfile",
+ args_info->pidfile_orig);
+ } else {
+ fprintf(outfile, "%s\n", "pidfile");
+ }
+ }
+ if (args_info->statedir_given) {
+ if (args_info->statedir_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "statedir",
+ args_info->statedir_orig);
+ } else {
+ fprintf(outfile, "%s\n", "statedir");
+ }
+ }
+ if (args_info->dns_given) {
+ if (args_info->dns_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "dns",
+ args_info->dns_orig);
+ } else {
+ fprintf(outfile, "%s\n", "dns");
+ }
+ }
+ if (args_info->listen_given) {
+ if (args_info->listen_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "listen",
+ args_info->listen_orig);
+ } else {
+ fprintf(outfile, "%s\n", "listen");
+ }
+ }
+ if (args_info->remote_given) {
+ if (args_info->remote_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "remote",
+ args_info->remote_orig);
+ } else {
+ fprintf(outfile, "%s\n", "remote");
+ }
+ }
+ if (args_info->contexts_given) {
+ if (args_info->contexts_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "contexts",
+ args_info->contexts_orig);
+ } else {
+ fprintf(outfile, "%s\n", "contexts");
+ }
+ }
+ if (args_info->timelimit_given) {
+ if (args_info->timelimit_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "timelimit",
+ args_info->timelimit_orig);
+ } else {
+ fprintf(outfile, "%s\n", "timelimit");
+ }
+ }
+ if (args_info->gtpversion_given) {
+ if (args_info->gtpversion_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "gtpversion",
+ args_info->gtpversion_orig);
+ } else {
+ fprintf(outfile, "%s\n", "gtpversion");
+ }
+ }
+ if (args_info->apn_given) {
+ if (args_info->apn_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "apn",
+ args_info->apn_orig);
+ } else {
+ fprintf(outfile, "%s\n", "apn");
+ }
+ }
+ if (args_info->selmode_given) {
+ if (args_info->selmode_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "selmode",
+ args_info->selmode_orig);
+ } else {
+ fprintf(outfile, "%s\n", "selmode");
+ }
+ }
+ if (args_info->imsi_given) {
+ if (args_info->imsi_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "imsi",
+ args_info->imsi_orig);
+ } else {
+ fprintf(outfile, "%s\n", "imsi");
+ }
+ }
+ if (args_info->nsapi_given) {
+ if (args_info->nsapi_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "nsapi",
+ args_info->nsapi_orig);
+ } else {
+ fprintf(outfile, "%s\n", "nsapi");
+ }
+ }
+ if (args_info->msisdn_given) {
+ if (args_info->msisdn_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "msisdn",
+ args_info->msisdn_orig);
+ } else {
+ fprintf(outfile, "%s\n", "msisdn");
+ }
+ }
+ if (args_info->qos_given) {
+ if (args_info->qos_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "qos",
+ args_info->qos_orig);
+ } else {
+ fprintf(outfile, "%s\n", "qos");
+ }
+ }
+ if (args_info->charging_given) {
+ if (args_info->charging_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "charging",
+ args_info->charging_orig);
+ } else {
+ fprintf(outfile, "%s\n", "charging");
+ }
+ }
+ if (args_info->uid_given) {
+ if (args_info->uid_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "uid",
+ args_info->uid_orig);
+ } else {
+ fprintf(outfile, "%s\n", "uid");
+ }
+ }
+ if (args_info->pwd_given) {
+ if (args_info->pwd_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "pwd",
+ args_info->pwd_orig);
+ } else {
+ fprintf(outfile, "%s\n", "pwd");
+ }
+ }
+ if (args_info->createif_given) {
+ fprintf(outfile, "%s\n", "createif");
+ }
+ if (args_info->net_given) {
+ if (args_info->net_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "net",
+ args_info->net_orig);
+ } else {
+ fprintf(outfile, "%s\n", "net");
+ }
+ }
+ if (args_info->defaultroute_given) {
+ fprintf(outfile, "%s\n", "defaultroute");
+ }
+ if (args_info->ipup_given) {
+ if (args_info->ipup_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "ipup",
+ args_info->ipup_orig);
+ } else {
+ fprintf(outfile, "%s\n", "ipup");
+ }
+ }
+ if (args_info->ipdown_given) {
+ if (args_info->ipdown_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "ipdown",
+ args_info->ipdown_orig);
+ } else {
+ fprintf(outfile, "%s\n", "ipdown");
+ }
+ }
+ if (args_info->pinghost_given) {
+ if (args_info->pinghost_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "pinghost",
+ args_info->pinghost_orig);
+ } else {
+ fprintf(outfile, "%s\n", "pinghost");
+ }
+ }
+ if (args_info->pingrate_given) {
+ if (args_info->pingrate_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "pingrate",
+ args_info->pingrate_orig);
+ } else {
+ fprintf(outfile, "%s\n", "pingrate");
+ }
+ }
+ if (args_info->pingsize_given) {
+ if (args_info->pingsize_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "pingsize",
+ args_info->pingsize_orig);
+ } else {
+ fprintf(outfile, "%s\n", "pingsize");
+ }
+ }
+ if (args_info->pingcount_given) {
+ if (args_info->pingcount_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "pingcount",
+ args_info->pingcount_orig);
+ } else {
+ fprintf(outfile, "%s\n", "pingcount");
+ }
+ }
+ if (args_info->pingquiet_given) {
+ fprintf(outfile, "%s\n", "pingquiet");
+ }
+ if (args_info->norecovery_given) {
+ fprintf(outfile, "%s\n", "norecovery");
+ }
+
+ fclose(outfile);
+
+ i = EXIT_SUCCESS;
+ return i;
}
-void
-cmdline_parser_free (struct gengetopt_args_info *args_info)
+void cmdline_parser_free(struct gengetopt_args_info *args_info)
{
- cmdline_parser_release (args_info);
+ cmdline_parser_release(args_info);
}
-
/* gengetopt_strdup() */
/* strdup.c replacement of strdup, which is not standard */
-char *
-gengetopt_strdup (const char *s)
+char *gengetopt_strdup(const char *s)
{
- char *result = NULL;
- if (!s)
- return result;
-
- result = (char*)malloc(strlen(s) + 1);
- if (result == (char*)0)
- return (char*)0;
- strcpy(result, s);
- return result;
+ char *result = NULL;
+ if (!s)
+ return result;
+
+ result = (char *)malloc(strlen(s) + 1);
+ if (result == (char *)0)
+ return (char *)0;
+ strcpy(result, s);
+ return result;
}
int
-cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info)
+cmdline_parser(int argc, char *const *argv,
+ struct gengetopt_args_info *args_info)
{
- return cmdline_parser2 (argc, argv, args_info, 0, 1, 1);
+ return cmdline_parser2(argc, argv, args_info, 0, 1, 1);
}
int
-cmdline_parser2 (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required)
+cmdline_parser2(int argc, char *const *argv,
+ struct gengetopt_args_info *args_info, int override,
+ int initialize, int check_required)
{
- int result;
+ int result;
+
+ result =
+ cmdline_parser_internal(argc, argv, args_info, override, initialize,
+ check_required, NULL);
- result = cmdline_parser_internal (argc, argv, args_info, override, initialize, check_required, NULL);
+ if (result == EXIT_FAILURE) {
+ cmdline_parser_free(args_info);
+ exit(EXIT_FAILURE);
+ }
- if (result == EXIT_FAILURE)
- {
- cmdline_parser_free (args_info);
- exit (EXIT_FAILURE);
- }
-
- return result;
+ return result;
}
int
-cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name)
+cmdline_parser_required(struct gengetopt_args_info *args_info,
+ const char *prog_name)
{
- return EXIT_SUCCESS;
+ return EXIT_SUCCESS;
}
int
-cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required, const char *additional_error)
+cmdline_parser_internal(int argc, char *const *argv,
+ struct gengetopt_args_info *args_info, int override,
+ int initialize, int check_required,
+ const char *additional_error)
{
- int c; /* Character of the parsed option. */
-
- int error = 0;
- struct gengetopt_args_info local_args_info;
-
- if (initialize)
- cmdline_parser_init (args_info);
-
- cmdline_parser_init (&local_args_info);
-
- optarg = 0;
- optind = 0;
- opterr = 1;
- optopt = '?';
-
- while (1)
- {
- int option_index = 0;
- char *stop_char;
-
- static struct option long_options[] = {
- { "help", 0, NULL, 'h' },
- { "version", 0, NULL, 'V' },
- { "debug", 0, NULL, 'd' },
- { "conf", 1, NULL, 'c' },
- { "pidfile", 1, NULL, 0 },
- { "statedir", 1, NULL, 0 },
- { "dns", 1, NULL, 0 },
- { "listen", 1, NULL, 'l' },
- { "remote", 1, NULL, 'r' },
- { "contexts", 1, NULL, 0 },
- { "timelimit", 1, NULL, 0 },
- { "gtpversion", 1, NULL, 0 },
- { "apn", 1, NULL, 'a' },
- { "selmode", 1, NULL, 0 },
- { "rattype", 1, NULL, 0},
- { "userloc", 1, NULL, 0},
- { "rai", 1, NULL, 0},
- { "mstz", 1, NULL, 0},
- { "imeisv", 1, NULL, 0},
- { "imsi", 1, NULL, 'i' },
- { "nsapi", 1, NULL, 0 },
- { "msisdn", 1, NULL, 'm' },
- { "qos", 1, NULL, 'q' },
- { "qose1", 1, NULL, 0 },
- { "qose2", 1, NULL, 0 },
- { "qose3", 1, NULL, 0 },
- { "qose4", 1, NULL, 0 },
- { "charging", 1, NULL, 0 },
- { "uid", 1, NULL, 'u' },
- { "pwd", 1, NULL, 'p' },
- { "createif", 0, NULL, 0 },
- { "net", 1, NULL, 'n' },
- { "defaultroute", 0, NULL, 0 },
- { "ipup", 1, NULL, 0 },
- { "ipdown", 1, NULL, 0 },
- { "pinghost", 1, NULL, 0 },
- { "pingrate", 1, NULL, 0 },
- { "pingsize", 1, NULL, 0 },
- { "pingcount", 1, NULL, 0 },
- { "pingquiet", 0, NULL, 0 },
- { "norecovery", 0, NULL, 0 },
- { NULL, 0, NULL, 0 }
- };
-
- stop_char = 0;
- c = getopt_long (argc, argv, "hVdc:l:r:a:i:m:q:u:p:n:", long_options, &option_index);
-
- if (c == -1) break; /* Exit from `while (1)' loop. */
-
- switch (c)
- {
- case 'h': /* Print help and exit. */
- cmdline_parser_print_help ();
- cmdline_parser_free (&local_args_info);
- exit (EXIT_SUCCESS);
-
- case 'V': /* Print version and exit. */
- cmdline_parser_print_version ();
- cmdline_parser_free (&local_args_info);
- exit (EXIT_SUCCESS);
-
- case 'd': /* Run in debug mode. */
- if (local_args_info.debug_given)
- {
- fprintf (stderr, "%s: `--debug' (`-d') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->debug_given && ! override)
- continue;
- local_args_info.debug_given = 1;
- args_info->debug_given = 1;
- args_info->debug_flag = !(args_info->debug_flag);
- break;
-
- case 'c': /* Read configuration file. */
- if (local_args_info.conf_given)
- {
- fprintf (stderr, "%s: `--conf' (`-c') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->conf_given && ! override)
- continue;
- local_args_info.conf_given = 1;
- args_info->conf_given = 1;
- if (args_info->conf_arg)
- free (args_info->conf_arg); /* free previous string */
- args_info->conf_arg = gengetopt_strdup (optarg);
- if (args_info->conf_orig)
- free (args_info->conf_orig); /* free previous string */
- args_info->conf_orig = gengetopt_strdup (optarg);
- break;
-
- case 'l': /* Local interface. */
- if (local_args_info.listen_given)
- {
- fprintf (stderr, "%s: `--listen' (`-l') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->listen_given && ! override)
- continue;
- local_args_info.listen_given = 1;
- args_info->listen_given = 1;
- if (args_info->listen_arg)
- free (args_info->listen_arg); /* free previous string */
- args_info->listen_arg = gengetopt_strdup (optarg);
- if (args_info->listen_orig)
- free (args_info->listen_orig); /* free previous string */
- args_info->listen_orig = gengetopt_strdup (optarg);
- break;
-
- case 'r': /* Remote host. */
- if (local_args_info.remote_given)
- {
- fprintf (stderr, "%s: `--remote' (`-r') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->remote_given && ! override)
- continue;
- local_args_info.remote_given = 1;
- args_info->remote_given = 1;
- if (args_info->remote_arg)
- free (args_info->remote_arg); /* free previous string */
- args_info->remote_arg = gengetopt_strdup (optarg);
- if (args_info->remote_orig)
- free (args_info->remote_orig); /* free previous string */
- args_info->remote_orig = gengetopt_strdup (optarg);
- break;
-
- case 'a': /* Access point name. */
- if (local_args_info.apn_given)
- {
- fprintf (stderr, "%s: `--apn' (`-a') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->apn_given && ! override)
- continue;
- local_args_info.apn_given = 1;
- args_info->apn_given = 1;
- if (args_info->apn_arg)
- free (args_info->apn_arg); /* free previous string */
- args_info->apn_arg = gengetopt_strdup (optarg);
- if (args_info->apn_orig)
- free (args_info->apn_orig); /* free previous string */
- args_info->apn_orig = gengetopt_strdup (optarg);
- break;
-
- case 'i': /* IMSI. */
- if (local_args_info.imsi_given)
- {
- fprintf (stderr, "%s: `--imsi' (`-i') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->imsi_given && ! override)
- continue;
- local_args_info.imsi_given = 1;
- args_info->imsi_given = 1;
- if (args_info->imsi_arg)
- free (args_info->imsi_arg); /* free previous string */
- args_info->imsi_arg = gengetopt_strdup (optarg);
- if (args_info->imsi_orig)
- free (args_info->imsi_orig); /* free previous string */
- args_info->imsi_orig = gengetopt_strdup (optarg);
- break;
-
- case 'm': /* Mobile Station ISDN number. */
- if (local_args_info.msisdn_given)
- {
- fprintf (stderr, "%s: `--msisdn' (`-m') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->msisdn_given && ! override)
- continue;
- local_args_info.msisdn_given = 1;
- args_info->msisdn_given = 1;
- if (args_info->msisdn_arg)
- free (args_info->msisdn_arg); /* free previous string */
- args_info->msisdn_arg = gengetopt_strdup (optarg);
- if (args_info->msisdn_orig)
- free (args_info->msisdn_orig); /* free previous string */
- args_info->msisdn_orig = gengetopt_strdup (optarg);
- break;
-
- case 'q': /* Requested quality of service. */
- if (local_args_info.qos_given)
- {
- fprintf (stderr, "%s: `--qos' (`-q') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->qos_given && ! override)
- continue;
- local_args_info.qos_given = 1;
- args_info->qos_given = 1;
- args_info->qos_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->qos_orig)
- free (args_info->qos_orig); /* free previous string */
- args_info->qos_orig = gengetopt_strdup (optarg);
- break;
-
- case 'u': /* Login user ID. */
- if (local_args_info.uid_given)
- {
- fprintf (stderr, "%s: `--uid' (`-u') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->uid_given && ! override)
- continue;
- local_args_info.uid_given = 1;
- args_info->uid_given = 1;
- if (args_info->uid_arg)
- free (args_info->uid_arg); /* free previous string */
- args_info->uid_arg = gengetopt_strdup (optarg);
- if (args_info->uid_orig)
- free (args_info->uid_orig); /* free previous string */
- args_info->uid_orig = gengetopt_strdup (optarg);
- break;
-
- case 'p': /* Login password. */
- if (local_args_info.pwd_given)
- {
- fprintf (stderr, "%s: `--pwd' (`-p') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->pwd_given && ! override)
- continue;
- local_args_info.pwd_given = 1;
- args_info->pwd_given = 1;
- if (args_info->pwd_arg)
- free (args_info->pwd_arg); /* free previous string */
- args_info->pwd_arg = gengetopt_strdup (optarg);
- if (args_info->pwd_orig)
- free (args_info->pwd_orig); /* free previous string */
- args_info->pwd_orig = gengetopt_strdup (optarg);
- break;
-
- case 'n': /* Network address for local interface. */
- if (local_args_info.net_given)
- {
- fprintf (stderr, "%s: `--net' (`-n') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->net_given && ! override)
- continue;
- local_args_info.net_given = 1;
- args_info->net_given = 1;
- if (args_info->net_arg)
- free (args_info->net_arg); /* free previous string */
- args_info->net_arg = gengetopt_strdup (optarg);
- if (args_info->net_orig)
- free (args_info->net_orig); /* free previous string */
- args_info->net_orig = gengetopt_strdup (optarg);
- break;
-
-
- case 0: /* Long option with no short option */
- /* Filename of process id file. */
- if (strcmp (long_options[option_index].name, "pidfile") == 0)
- {
- if (local_args_info.pidfile_given)
- {
- fprintf (stderr, "%s: `--pidfile' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->pidfile_given && ! override)
- continue;
- local_args_info.pidfile_given = 1;
- args_info->pidfile_given = 1;
- if (args_info->pidfile_arg)
- free (args_info->pidfile_arg); /* free previous string */
- args_info->pidfile_arg = gengetopt_strdup (optarg);
- if (args_info->pidfile_orig)
- free (args_info->pidfile_orig); /* free previous string */
- args_info->pidfile_orig = gengetopt_strdup (optarg);
- }
- /* Directory of nonvolatile data. */
- else if (strcmp (long_options[option_index].name, "statedir") == 0)
- {
- if (local_args_info.statedir_given)
- {
- fprintf (stderr, "%s: `--statedir' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->statedir_given && ! override)
- continue;
- local_args_info.statedir_given = 1;
- args_info->statedir_given = 1;
- if (args_info->statedir_arg)
- free (args_info->statedir_arg); /* free previous string */
- args_info->statedir_arg = gengetopt_strdup (optarg);
- if (args_info->statedir_orig)
- free (args_info->statedir_orig); /* free previous string */
- args_info->statedir_orig = gengetopt_strdup (optarg);
- }
- /* DNS Server to use. */
- else if (strcmp (long_options[option_index].name, "dns") == 0)
- {
- if (local_args_info.dns_given)
- {
- fprintf (stderr, "%s: `--dns' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->dns_given && ! override)
- continue;
- local_args_info.dns_given = 1;
- args_info->dns_given = 1;
- if (args_info->dns_arg)
- free (args_info->dns_arg); /* free previous string */
- args_info->dns_arg = gengetopt_strdup (optarg);
- if (args_info->dns_orig)
- free (args_info->dns_orig); /* free previous string */
- args_info->dns_orig = gengetopt_strdup (optarg);
- }
- /* Number of contexts. */
- else if (strcmp (long_options[option_index].name, "contexts") == 0)
- {
- if (local_args_info.contexts_given)
- {
- fprintf (stderr, "%s: `--contexts' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->contexts_given && ! override)
- continue;
- local_args_info.contexts_given = 1;
- args_info->contexts_given = 1;
- args_info->contexts_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->contexts_orig)
- free (args_info->contexts_orig); /* free previous string */
- args_info->contexts_orig = gengetopt_strdup (optarg);
- }
- /* Exit after timelimit seconds. */
- else if (strcmp (long_options[option_index].name, "timelimit") == 0)
- {
- if (local_args_info.timelimit_given)
- {
- fprintf (stderr, "%s: `--timelimit' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->timelimit_given && ! override)
- continue;
- local_args_info.timelimit_given = 1;
- args_info->timelimit_given = 1;
- args_info->timelimit_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->timelimit_orig)
- free (args_info->timelimit_orig); /* free previous string */
- args_info->timelimit_orig = gengetopt_strdup (optarg);
- }
- /* GTP version to use. */
- else if (strcmp (long_options[option_index].name, "gtpversion") == 0)
- {
- if (local_args_info.gtpversion_given)
- {
- fprintf (stderr, "%s: `--gtpversion' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->gtpversion_given && ! override)
- continue;
- local_args_info.gtpversion_given = 1;
- args_info->gtpversion_given = 1;
- args_info->gtpversion_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->gtpversion_orig)
- free (args_info->gtpversion_orig); /* free previous string */
- args_info->gtpversion_orig = gengetopt_strdup (optarg);
- }
- /* Selection mode. */
- else if (strcmp (long_options[option_index].name, "selmode") == 0)
- {
- if (local_args_info.selmode_given)
- {
- fprintf (stderr, "%s: `--selmode' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->selmode_given && ! override)
- continue;
- local_args_info.selmode_given = 1;
- args_info->selmode_given = 1;
- args_info->selmode_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->selmode_orig)
- free (args_info->selmode_orig); /* free previous string */
- args_info->selmode_orig = gengetopt_strdup (optarg);
- }
- /* QoS Extension 1. */
- else if (strcmp (long_options[option_index].name, "qose1") == 0)
- {
- if (args_info->qose1_given)
- {
- fprintf (stderr, "%s: `--qose1' option given more than once\n", PACKAGE);
- exit (EXIT_FAILURE);
- }
- args_info->qose1_given = 1;
- args_info->qose1_arg = strtoull (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->qose1_orig)
- free (args_info->qose1_orig); /* free previous string */
- args_info->qose1_orig = gengetopt_strdup (optarg);
- break;
- }
- /* QoS Extension 2. */
- else if (strcmp (long_options[option_index].name, "qose2") == 0)
- {
- if (args_info->qose2_given)
- {
- fprintf (stderr, "%s: `--qose2' option given more than once\n", PACKAGE);
- exit (EXIT_FAILURE);
- }
- args_info->qose2_given = 1;
- args_info->qose2_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->qose2_orig)
- free (args_info->qose2_orig); /* free previous string */
- args_info->qose2_orig = gengetopt_strdup (optarg);
- break;
- }
- /* QoS Extension 3. */
- else if (strcmp (long_options[option_index].name, "qose3") == 0)
- {
- if (args_info->qose3_given)
- {
- fprintf (stderr, "%s: `--qose3' option given more than once\n", PACKAGE);
- exit (EXIT_FAILURE);
- }
- args_info->qose3_given = 1;
- args_info->qose3_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->qose3_orig)
- free (args_info->qose3_orig); /* free previous string */
- args_info->qose3_orig = gengetopt_strdup (optarg);
- break;
- }
- /* QoS Extension 4. */
- else if (strcmp (long_options[option_index].name, "qose4") == 0)
- {
- if (args_info->qose4_given)
- {
- fprintf (stderr, "%s: `--qose4' option given more than once\n", PACKAGE);
- exit (EXIT_FAILURE);
- }
- args_info->qose4_given = 1;
- args_info->qose4_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->qose4_orig)
- free (args_info->qose4_orig); /* free previous string */
- args_info->qose4_orig = gengetopt_strdup (optarg);
- break;
- }
- /* Radio Access Technology Type. */
- else if (strcmp (long_options[option_index].name, "rattype") == 0)
- {
- if (args_info->rattype_given)
- {
- fprintf (stderr, "%s: `--rattype' option given more than once\n", PACKAGE);
- exit (EXIT_FAILURE);
- }
- args_info->rattype_given = 1;
- /* args_info->rattype_arg = strtol (optarg,&stop_char,0); */
- args_info->rattype_arg = strdup (optarg);
- break;
- }
- /* User Location Information. */
- else if (strcmp (long_options[option_index].name, "userloc") == 0)
- {
- if (args_info->userloc_given)
- {
- fprintf (stderr, "%s: `--userloc' option given more than once\n", PACKAGE);
- exit (EXIT_FAILURE);
- }
- args_info->userloc_given = 1;
- args_info->userloc_arg = strdup (optarg);
- break;
- }
- /* Routing Area Information. */
- else if (strcmp (long_options[option_index].name, "rai") == 0)
- {
- if (args_info->rai_given)
- {
- fprintf (stderr, "%s: `--rai' option given more than once\n", PACKAGE);
- exit (EXIT_FAILURE);
- }
- args_info->rai_given = 1;
- args_info->rai_arg = strdup (optarg);
- break;
- }
- /* MS Time Zone */
- else if (strcmp (long_options[option_index].name, "mstz") == 0)
- {
- if (args_info->mstz_given)
- {
- fprintf (stderr, "%s: `--mstz' option given more than once\n", PACKAGE);
- exit (EXIT_FAILURE);
- }
- args_info->mstz_given = 1;
- args_info->mstz_arg = strdup (optarg);
- break;
- }
- /* IMEI(SV) */
- else if (strcmp (long_options[option_index].name, "imeisv") == 0)
- {
- if (args_info->imeisv_given)
- {
- fprintf (stderr, "%s: `--imeisv' option given more than once\n", PACKAGE);
- exit (EXIT_FAILURE);
- }
- args_info->imeisv_given = 1;
- args_info->imeisv_arg = strdup (optarg);
- break;
- }
- /* NSAPI. */
- else if (strcmp (long_options[option_index].name, "nsapi") == 0)
- {
- if (local_args_info.nsapi_given)
- {
- fprintf (stderr, "%s: `--nsapi' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->nsapi_given && ! override)
- continue;
- local_args_info.nsapi_given = 1;
- args_info->nsapi_given = 1;
- args_info->nsapi_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->nsapi_orig)
- free (args_info->nsapi_orig); /* free previous string */
- args_info->nsapi_orig = gengetopt_strdup (optarg);
- }
- /* Charging characteristics. */
- else if (strcmp (long_options[option_index].name, "charging") == 0)
- {
- if (local_args_info.charging_given)
- {
- fprintf (stderr, "%s: `--charging' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->charging_given && ! override)
- continue;
- local_args_info.charging_given = 1;
- args_info->charging_given = 1;
- args_info->charging_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->charging_orig)
- free (args_info->charging_orig); /* free previous string */
- args_info->charging_orig = gengetopt_strdup (optarg);
- }
- /* Create local network interface. */
- else if (strcmp (long_options[option_index].name, "createif") == 0)
- {
- if (local_args_info.createif_given)
- {
- fprintf (stderr, "%s: `--createif' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->createif_given && ! override)
- continue;
- local_args_info.createif_given = 1;
- args_info->createif_given = 1;
- args_info->createif_flag = !(args_info->createif_flag);
- }
- /* Create default route. */
- else if (strcmp (long_options[option_index].name, "defaultroute") == 0)
- {
- if (local_args_info.defaultroute_given)
- {
- fprintf (stderr, "%s: `--defaultroute' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->defaultroute_given && ! override)
- continue;
- local_args_info.defaultroute_given = 1;
- args_info->defaultroute_given = 1;
- args_info->defaultroute_flag = !(args_info->defaultroute_flag);
- }
- /* Script to run after link-up. */
- else if (strcmp (long_options[option_index].name, "ipup") == 0)
- {
- if (local_args_info.ipup_given)
- {
- fprintf (stderr, "%s: `--ipup' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->ipup_given && ! override)
- continue;
- local_args_info.ipup_given = 1;
- args_info->ipup_given = 1;
- if (args_info->ipup_arg)
- free (args_info->ipup_arg); /* free previous string */
- args_info->ipup_arg = gengetopt_strdup (optarg);
- if (args_info->ipup_orig)
- free (args_info->ipup_orig); /* free previous string */
- args_info->ipup_orig = gengetopt_strdup (optarg);
- }
- /* Script to run after link-down. */
- else if (strcmp (long_options[option_index].name, "ipdown") == 0)
- {
- if (local_args_info.ipdown_given)
- {
- fprintf (stderr, "%s: `--ipdown' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->ipdown_given && ! override)
- continue;
- local_args_info.ipdown_given = 1;
- args_info->ipdown_given = 1;
- if (args_info->ipdown_arg)
- free (args_info->ipdown_arg); /* free previous string */
- args_info->ipdown_arg = gengetopt_strdup (optarg);
- if (args_info->ipdown_orig)
- free (args_info->ipdown_orig); /* free previous string */
- args_info->ipdown_orig = gengetopt_strdup (optarg);
- }
- /* Ping remote host. */
- else if (strcmp (long_options[option_index].name, "pinghost") == 0)
- {
- if (local_args_info.pinghost_given)
- {
- fprintf (stderr, "%s: `--pinghost' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->pinghost_given && ! override)
- continue;
- local_args_info.pinghost_given = 1;
- args_info->pinghost_given = 1;
- if (args_info->pinghost_arg)
- free (args_info->pinghost_arg); /* free previous string */
- args_info->pinghost_arg = gengetopt_strdup (optarg);
- if (args_info->pinghost_orig)
- free (args_info->pinghost_orig); /* free previous string */
- args_info->pinghost_orig = gengetopt_strdup (optarg);
- }
- /* Number of ping req per second. */
- else if (strcmp (long_options[option_index].name, "pingrate") == 0)
- {
- if (local_args_info.pingrate_given)
- {
- fprintf (stderr, "%s: `--pingrate' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->pingrate_given && ! override)
- continue;
- local_args_info.pingrate_given = 1;
- args_info->pingrate_given = 1;
- args_info->pingrate_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->pingrate_orig)
- free (args_info->pingrate_orig); /* free previous string */
- args_info->pingrate_orig = gengetopt_strdup (optarg);
- }
- /* Number of ping data bytes. */
- else if (strcmp (long_options[option_index].name, "pingsize") == 0)
- {
- if (local_args_info.pingsize_given)
- {
- fprintf (stderr, "%s: `--pingsize' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->pingsize_given && ! override)
- continue;
- local_args_info.pingsize_given = 1;
- args_info->pingsize_given = 1;
- args_info->pingsize_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->pingsize_orig)
- free (args_info->pingsize_orig); /* free previous string */
- args_info->pingsize_orig = gengetopt_strdup (optarg);
- }
- /* Number of ping req to send. */
- else if (strcmp (long_options[option_index].name, "pingcount") == 0)
- {
- if (local_args_info.pingcount_given)
- {
- fprintf (stderr, "%s: `--pingcount' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->pingcount_given && ! override)
- continue;
- local_args_info.pingcount_given = 1;
- args_info->pingcount_given = 1;
- args_info->pingcount_arg = strtol (optarg, &stop_char, 0);
- if (!(stop_char && *stop_char == '\0')) {
- fprintf(stderr, "%s: invalid numeric value: %s\n", argv[0], optarg);
- goto failure;
- }
- if (args_info->pingcount_orig)
- free (args_info->pingcount_orig); /* free previous string */
- args_info->pingcount_orig = gengetopt_strdup (optarg);
- }
- /* Do not print ping packet info. */
- else if (strcmp (long_options[option_index].name, "pingquiet") == 0)
- {
- if (local_args_info.pingquiet_given)
- {
- fprintf (stderr, "%s: `--pingquiet' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->pingquiet_given && ! override)
- continue;
- local_args_info.pingquiet_given = 1;
- args_info->pingquiet_given = 1;
- args_info->pingquiet_flag = !(args_info->pingquiet_flag);
- }
- /* Do not send recovery. */
- else if (strcmp (long_options[option_index].name, "norecovery") == 0)
- {
- if (local_args_info.norecovery_given)
- {
- fprintf (stderr, "%s: `--norecovery' option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
- goto failure;
- }
- if (args_info->norecovery_given && ! override)
- continue;
- local_args_info.norecovery_given = 1;
- args_info->norecovery_given = 1;
- args_info->norecovery_flag = !(args_info->norecovery_flag);
- }
-
- break;
- case '?': /* Invalid option. */
- /* `getopt_long' already printed an error message. */
- goto failure;
-
- default: /* bug: option not considered. */
- fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : ""));
- abort ();
- } /* switch */
- } /* while */
-
-
-
-
- cmdline_parser_release (&local_args_info);
-
- if ( error )
- return (EXIT_FAILURE);
-
- return 0;
+ int c; /* Character of the parsed option. */
+
+ int error = 0;
+ struct gengetopt_args_info local_args_info;
+
+ if (initialize)
+ cmdline_parser_init(args_info);
+
+ cmdline_parser_init(&local_args_info);
+
+ optarg = 0;
+ optind = 0;
+ opterr = 1;
+ optopt = '?';
+
+ while (1) {
+ int option_index = 0;
+ char *stop_char;
+
+ static struct option long_options[] = {
+ {"help", 0, NULL, 'h'},
+ {"version", 0, NULL, 'V'},
+ {"debug", 0, NULL, 'd'},
+ {"conf", 1, NULL, 'c'},
+ {"pidfile", 1, NULL, 0},
+ {"statedir", 1, NULL, 0},
+ {"dns", 1, NULL, 0},
+ {"listen", 1, NULL, 'l'},
+ {"remote", 1, NULL, 'r'},
+ {"contexts", 1, NULL, 0},
+ {"timelimit", 1, NULL, 0},
+ {"gtpversion", 1, NULL, 0},
+ {"apn", 1, NULL, 'a'},
+ {"selmode", 1, NULL, 0},
+ {"rattype", 1, NULL, 0},
+ {"userloc", 1, NULL, 0},
+ {"rai", 1, NULL, 0},
+ {"mstz", 1, NULL, 0},
+ {"imeisv", 1, NULL, 0},
+ {"imsi", 1, NULL, 'i'},
+ {"nsapi", 1, NULL, 0},
+ {"msisdn", 1, NULL, 'm'},
+ {"qos", 1, NULL, 'q'},
+ {"qose1", 1, NULL, 0},
+ {"qose2", 1, NULL, 0},
+ {"qose3", 1, NULL, 0},
+ {"qose4", 1, NULL, 0},
+ {"charging", 1, NULL, 0},
+ {"uid", 1, NULL, 'u'},
+ {"pwd", 1, NULL, 'p'},
+ {"createif", 0, NULL, 0},
+ {"net", 1, NULL, 'n'},
+ {"defaultroute", 0, NULL, 0},
+ {"ipup", 1, NULL, 0},
+ {"ipdown", 1, NULL, 0},
+ {"pinghost", 1, NULL, 0},
+ {"pingrate", 1, NULL, 0},
+ {"pingsize", 1, NULL, 0},
+ {"pingcount", 1, NULL, 0},
+ {"pingquiet", 0, NULL, 0},
+ {"norecovery", 0, NULL, 0},
+ {NULL, 0, NULL, 0}
+ };
+
+ stop_char = 0;
+ c = getopt_long(argc, argv, "hVdc:l:r:a:i:m:q:u:p:n:",
+ long_options, &option_index);
+
+ if (c == -1)
+ break; /* Exit from `while (1)' loop. */
+
+ switch (c) {
+ case 'h': /* Print help and exit. */
+ cmdline_parser_print_help();
+ cmdline_parser_free(&local_args_info);
+ exit(EXIT_SUCCESS);
+
+ case 'V': /* Print version and exit. */
+ cmdline_parser_print_version();
+ cmdline_parser_free(&local_args_info);
+ exit(EXIT_SUCCESS);
+
+ case 'd': /* Run in debug mode. */
+ if (local_args_info.debug_given) {
+ fprintf(stderr,
+ "%s: `--debug' (`-d') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->debug_given && !override)
+ continue;
+ local_args_info.debug_given = 1;
+ args_info->debug_given = 1;
+ args_info->debug_flag = !(args_info->debug_flag);
+ break;
+
+ case 'c': /* Read configuration file. */
+ if (local_args_info.conf_given) {
+ fprintf(stderr,
+ "%s: `--conf' (`-c') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->conf_given && !override)
+ continue;
+ local_args_info.conf_given = 1;
+ args_info->conf_given = 1;
+ if (args_info->conf_arg)
+ free(args_info->conf_arg); /* free previous string */
+ args_info->conf_arg = gengetopt_strdup(optarg);
+ if (args_info->conf_orig)
+ free(args_info->conf_orig); /* free previous string */
+ args_info->conf_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 'l': /* Local interface. */
+ if (local_args_info.listen_given) {
+ fprintf(stderr,
+ "%s: `--listen' (`-l') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->listen_given && !override)
+ continue;
+ local_args_info.listen_given = 1;
+ args_info->listen_given = 1;
+ if (args_info->listen_arg)
+ free(args_info->listen_arg); /* free previous string */
+ args_info->listen_arg = gengetopt_strdup(optarg);
+ if (args_info->listen_orig)
+ free(args_info->listen_orig); /* free previous string */
+ args_info->listen_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 'r': /* Remote host. */
+ if (local_args_info.remote_given) {
+ fprintf(stderr,
+ "%s: `--remote' (`-r') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->remote_given && !override)
+ continue;
+ local_args_info.remote_given = 1;
+ args_info->remote_given = 1;
+ if (args_info->remote_arg)
+ free(args_info->remote_arg); /* free previous string */
+ args_info->remote_arg = gengetopt_strdup(optarg);
+ if (args_info->remote_orig)
+ free(args_info->remote_orig); /* free previous string */
+ args_info->remote_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 'a': /* Access point name. */
+ if (local_args_info.apn_given) {
+ fprintf(stderr,
+ "%s: `--apn' (`-a') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->apn_given && !override)
+ continue;
+ local_args_info.apn_given = 1;
+ args_info->apn_given = 1;
+ if (args_info->apn_arg)
+ free(args_info->apn_arg); /* free previous string */
+ args_info->apn_arg = gengetopt_strdup(optarg);
+ if (args_info->apn_orig)
+ free(args_info->apn_orig); /* free previous string */
+ args_info->apn_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 'i': /* IMSI. */
+ if (local_args_info.imsi_given) {
+ fprintf(stderr,
+ "%s: `--imsi' (`-i') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->imsi_given && !override)
+ continue;
+ local_args_info.imsi_given = 1;
+ args_info->imsi_given = 1;
+ if (args_info->imsi_arg)
+ free(args_info->imsi_arg); /* free previous string */
+ args_info->imsi_arg = gengetopt_strdup(optarg);
+ if (args_info->imsi_orig)
+ free(args_info->imsi_orig); /* free previous string */
+ args_info->imsi_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 'm': /* Mobile Station ISDN number. */
+ if (local_args_info.msisdn_given) {
+ fprintf(stderr,
+ "%s: `--msisdn' (`-m') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->msisdn_given && !override)
+ continue;
+ local_args_info.msisdn_given = 1;
+ args_info->msisdn_given = 1;
+ if (args_info->msisdn_arg)
+ free(args_info->msisdn_arg); /* free previous string */
+ args_info->msisdn_arg = gengetopt_strdup(optarg);
+ if (args_info->msisdn_orig)
+ free(args_info->msisdn_orig); /* free previous string */
+ args_info->msisdn_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 'q': /* Requested quality of service. */
+ if (local_args_info.qos_given) {
+ fprintf(stderr,
+ "%s: `--qos' (`-q') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->qos_given && !override)
+ continue;
+ local_args_info.qos_given = 1;
+ args_info->qos_given = 1;
+ args_info->qos_arg = strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->qos_orig)
+ free(args_info->qos_orig); /* free previous string */
+ args_info->qos_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 'u': /* Login user ID. */
+ if (local_args_info.uid_given) {
+ fprintf(stderr,
+ "%s: `--uid' (`-u') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->uid_given && !override)
+ continue;
+ local_args_info.uid_given = 1;
+ args_info->uid_given = 1;
+ if (args_info->uid_arg)
+ free(args_info->uid_arg); /* free previous string */
+ args_info->uid_arg = gengetopt_strdup(optarg);
+ if (args_info->uid_orig)
+ free(args_info->uid_orig); /* free previous string */
+ args_info->uid_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 'p': /* Login password. */
+ if (local_args_info.pwd_given) {
+ fprintf(stderr,
+ "%s: `--pwd' (`-p') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->pwd_given && !override)
+ continue;
+ local_args_info.pwd_given = 1;
+ args_info->pwd_given = 1;
+ if (args_info->pwd_arg)
+ free(args_info->pwd_arg); /* free previous string */
+ args_info->pwd_arg = gengetopt_strdup(optarg);
+ if (args_info->pwd_orig)
+ free(args_info->pwd_orig); /* free previous string */
+ args_info->pwd_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 'n': /* Network address for local interface. */
+ if (local_args_info.net_given) {
+ fprintf(stderr,
+ "%s: `--net' (`-n') option given more than once%s\n",
+ argv[0],
+ (additional_error ? additional_error :
+ ""));
+ goto failure;
+ }
+ if (args_info->net_given && !override)
+ continue;
+ local_args_info.net_given = 1;
+ args_info->net_given = 1;
+ if (args_info->net_arg)
+ free(args_info->net_arg); /* free previous string */
+ args_info->net_arg = gengetopt_strdup(optarg);
+ if (args_info->net_orig)
+ free(args_info->net_orig); /* free previous string */
+ args_info->net_orig = gengetopt_strdup(optarg);
+ break;
+
+ case 0: /* Long option with no short option */
+ /* Filename of process id file. */
+ if (strcmp(long_options[option_index].name, "pidfile")
+ == 0) {
+ if (local_args_info.pidfile_given) {
+ fprintf(stderr,
+ "%s: `--pidfile' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->pidfile_given && !override)
+ continue;
+ local_args_info.pidfile_given = 1;
+ args_info->pidfile_given = 1;
+ if (args_info->pidfile_arg)
+ free(args_info->pidfile_arg); /* free previous string */
+ args_info->pidfile_arg =
+ gengetopt_strdup(optarg);
+ if (args_info->pidfile_orig)
+ free(args_info->pidfile_orig); /* free previous string */
+ args_info->pidfile_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Directory of nonvolatile data. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "statedir") == 0) {
+ if (local_args_info.statedir_given) {
+ fprintf(stderr,
+ "%s: `--statedir' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->statedir_given && !override)
+ continue;
+ local_args_info.statedir_given = 1;
+ args_info->statedir_given = 1;
+ if (args_info->statedir_arg)
+ free(args_info->statedir_arg); /* free previous string */
+ args_info->statedir_arg =
+ gengetopt_strdup(optarg);
+ if (args_info->statedir_orig)
+ free(args_info->statedir_orig); /* free previous string */
+ args_info->statedir_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* DNS Server to use. */
+ else if (strcmp(long_options[option_index].name, "dns")
+ == 0) {
+ if (local_args_info.dns_given) {
+ fprintf(stderr,
+ "%s: `--dns' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->dns_given && !override)
+ continue;
+ local_args_info.dns_given = 1;
+ args_info->dns_given = 1;
+ if (args_info->dns_arg)
+ free(args_info->dns_arg); /* free previous string */
+ args_info->dns_arg = gengetopt_strdup(optarg);
+ if (args_info->dns_orig)
+ free(args_info->dns_orig); /* free previous string */
+ args_info->dns_orig = gengetopt_strdup(optarg);
+ }
+ /* Number of contexts. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "contexts") == 0) {
+ if (local_args_info.contexts_given) {
+ fprintf(stderr,
+ "%s: `--contexts' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->contexts_given && !override)
+ continue;
+ local_args_info.contexts_given = 1;
+ args_info->contexts_given = 1;
+ args_info->contexts_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->contexts_orig)
+ free(args_info->contexts_orig); /* free previous string */
+ args_info->contexts_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Exit after timelimit seconds. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "timelimit") == 0) {
+ if (local_args_info.timelimit_given) {
+ fprintf(stderr,
+ "%s: `--timelimit' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->timelimit_given && !override)
+ continue;
+ local_args_info.timelimit_given = 1;
+ args_info->timelimit_given = 1;
+ args_info->timelimit_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->timelimit_orig)
+ free(args_info->timelimit_orig); /* free previous string */
+ args_info->timelimit_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* GTP version to use. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "gtpversion") == 0) {
+ if (local_args_info.gtpversion_given) {
+ fprintf(stderr,
+ "%s: `--gtpversion' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->gtpversion_given && !override)
+ continue;
+ local_args_info.gtpversion_given = 1;
+ args_info->gtpversion_given = 1;
+ args_info->gtpversion_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->gtpversion_orig)
+ free(args_info->gtpversion_orig); /* free previous string */
+ args_info->gtpversion_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Selection mode. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "selmode") == 0) {
+ if (local_args_info.selmode_given) {
+ fprintf(stderr,
+ "%s: `--selmode' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->selmode_given && !override)
+ continue;
+ local_args_info.selmode_given = 1;
+ args_info->selmode_given = 1;
+ args_info->selmode_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->selmode_orig)
+ free(args_info->selmode_orig); /* free previous string */
+ args_info->selmode_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* QoS Extension 1. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "qose1") == 0) {
+ if (args_info->qose1_given) {
+ fprintf(stderr,
+ "%s: `--qose1' option given more than once\n",
+ PACKAGE);
+ exit(EXIT_FAILURE);
+ }
+ args_info->qose1_given = 1;
+ args_info->qose1_arg =
+ strtoull(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->qose1_orig)
+ free(args_info->qose1_orig); /* free previous string */
+ args_info->qose1_orig =
+ gengetopt_strdup(optarg);
+ break;
+ }
+ /* QoS Extension 2. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "qose2") == 0) {
+ if (args_info->qose2_given) {
+ fprintf(stderr,
+ "%s: `--qose2' option given more than once\n",
+ PACKAGE);
+ exit(EXIT_FAILURE);
+ }
+ args_info->qose2_given = 1;
+ args_info->qose2_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->qose2_orig)
+ free(args_info->qose2_orig); /* free previous string */
+ args_info->qose2_orig =
+ gengetopt_strdup(optarg);
+ break;
+ }
+ /* QoS Extension 3. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "qose3") == 0) {
+ if (args_info->qose3_given) {
+ fprintf(stderr,
+ "%s: `--qose3' option given more than once\n",
+ PACKAGE);
+ exit(EXIT_FAILURE);
+ }
+ args_info->qose3_given = 1;
+ args_info->qose3_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->qose3_orig)
+ free(args_info->qose3_orig); /* free previous string */
+ args_info->qose3_orig =
+ gengetopt_strdup(optarg);
+ break;
+ }
+ /* QoS Extension 4. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "qose4") == 0) {
+ if (args_info->qose4_given) {
+ fprintf(stderr,
+ "%s: `--qose4' option given more than once\n",
+ PACKAGE);
+ exit(EXIT_FAILURE);
+ }
+ args_info->qose4_given = 1;
+ args_info->qose4_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->qose4_orig)
+ free(args_info->qose4_orig); /* free previous string */
+ args_info->qose4_orig =
+ gengetopt_strdup(optarg);
+ break;
+ }
+ /* Radio Access Technology Type. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "rattype") == 0) {
+ if (args_info->rattype_given) {
+ fprintf(stderr,
+ "%s: `--rattype' option given more than once\n",
+ PACKAGE);
+ exit(EXIT_FAILURE);
+ }
+ args_info->rattype_given = 1;
+ /* args_info->rattype_arg = strtol (optarg,&stop_char,0); */
+ args_info->rattype_arg = strdup(optarg);
+ break;
+ }
+ /* User Location Information. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "userloc") == 0) {
+ if (args_info->userloc_given) {
+ fprintf(stderr,
+ "%s: `--userloc' option given more than once\n",
+ PACKAGE);
+ exit(EXIT_FAILURE);
+ }
+ args_info->userloc_given = 1;
+ args_info->userloc_arg = strdup(optarg);
+ break;
+ }
+ /* Routing Area Information. */
+ else if (strcmp(long_options[option_index].name, "rai")
+ == 0) {
+ if (args_info->rai_given) {
+ fprintf(stderr,
+ "%s: `--rai' option given more than once\n",
+ PACKAGE);
+ exit(EXIT_FAILURE);
+ }
+ args_info->rai_given = 1;
+ args_info->rai_arg = strdup(optarg);
+ break;
+ }
+ /* MS Time Zone */
+ else if (strcmp(long_options[option_index].name, "mstz")
+ == 0) {
+ if (args_info->mstz_given) {
+ fprintf(stderr,
+ "%s: `--mstz' option given more than once\n",
+ PACKAGE);
+ exit(EXIT_FAILURE);
+ }
+ args_info->mstz_given = 1;
+ args_info->mstz_arg = strdup(optarg);
+ break;
+ }
+ /* IMEI(SV) */
+ else if (strcmp
+ (long_options[option_index].name,
+ "imeisv") == 0) {
+ if (args_info->imeisv_given) {
+ fprintf(stderr,
+ "%s: `--imeisv' option given more than once\n",
+ PACKAGE);
+ exit(EXIT_FAILURE);
+ }
+ args_info->imeisv_given = 1;
+ args_info->imeisv_arg = strdup(optarg);
+ break;
+ }
+ /* NSAPI. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "nsapi") == 0) {
+ if (local_args_info.nsapi_given) {
+ fprintf(stderr,
+ "%s: `--nsapi' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->nsapi_given && !override)
+ continue;
+ local_args_info.nsapi_given = 1;
+ args_info->nsapi_given = 1;
+ args_info->nsapi_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->nsapi_orig)
+ free(args_info->nsapi_orig); /* free previous string */
+ args_info->nsapi_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Charging characteristics. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "charging") == 0) {
+ if (local_args_info.charging_given) {
+ fprintf(stderr,
+ "%s: `--charging' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->charging_given && !override)
+ continue;
+ local_args_info.charging_given = 1;
+ args_info->charging_given = 1;
+ args_info->charging_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->charging_orig)
+ free(args_info->charging_orig); /* free previous string */
+ args_info->charging_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Create local network interface. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "createif") == 0) {
+ if (local_args_info.createif_given) {
+ fprintf(stderr,
+ "%s: `--createif' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->createif_given && !override)
+ continue;
+ local_args_info.createif_given = 1;
+ args_info->createif_given = 1;
+ args_info->createif_flag =
+ !(args_info->createif_flag);
+ }
+ /* Create default route. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "defaultroute") == 0) {
+ if (local_args_info.defaultroute_given) {
+ fprintf(stderr,
+ "%s: `--defaultroute' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->defaultroute_given && !override)
+ continue;
+ local_args_info.defaultroute_given = 1;
+ args_info->defaultroute_given = 1;
+ args_info->defaultroute_flag =
+ !(args_info->defaultroute_flag);
+ }
+ /* Script to run after link-up. */
+ else if (strcmp(long_options[option_index].name, "ipup")
+ == 0) {
+ if (local_args_info.ipup_given) {
+ fprintf(stderr,
+ "%s: `--ipup' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->ipup_given && !override)
+ continue;
+ local_args_info.ipup_given = 1;
+ args_info->ipup_given = 1;
+ if (args_info->ipup_arg)
+ free(args_info->ipup_arg); /* free previous string */
+ args_info->ipup_arg = gengetopt_strdup(optarg);
+ if (args_info->ipup_orig)
+ free(args_info->ipup_orig); /* free previous string */
+ args_info->ipup_orig = gengetopt_strdup(optarg);
+ }
+ /* Script to run after link-down. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "ipdown") == 0) {
+ if (local_args_info.ipdown_given) {
+ fprintf(stderr,
+ "%s: `--ipdown' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->ipdown_given && !override)
+ continue;
+ local_args_info.ipdown_given = 1;
+ args_info->ipdown_given = 1;
+ if (args_info->ipdown_arg)
+ free(args_info->ipdown_arg); /* free previous string */
+ args_info->ipdown_arg =
+ gengetopt_strdup(optarg);
+ if (args_info->ipdown_orig)
+ free(args_info->ipdown_orig); /* free previous string */
+ args_info->ipdown_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Ping remote host. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "pinghost") == 0) {
+ if (local_args_info.pinghost_given) {
+ fprintf(stderr,
+ "%s: `--pinghost' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->pinghost_given && !override)
+ continue;
+ local_args_info.pinghost_given = 1;
+ args_info->pinghost_given = 1;
+ if (args_info->pinghost_arg)
+ free(args_info->pinghost_arg); /* free previous string */
+ args_info->pinghost_arg =
+ gengetopt_strdup(optarg);
+ if (args_info->pinghost_orig)
+ free(args_info->pinghost_orig); /* free previous string */
+ args_info->pinghost_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Number of ping req per second. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "pingrate") == 0) {
+ if (local_args_info.pingrate_given) {
+ fprintf(stderr,
+ "%s: `--pingrate' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->pingrate_given && !override)
+ continue;
+ local_args_info.pingrate_given = 1;
+ args_info->pingrate_given = 1;
+ args_info->pingrate_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->pingrate_orig)
+ free(args_info->pingrate_orig); /* free previous string */
+ args_info->pingrate_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Number of ping data bytes. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "pingsize") == 0) {
+ if (local_args_info.pingsize_given) {
+ fprintf(stderr,
+ "%s: `--pingsize' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->pingsize_given && !override)
+ continue;
+ local_args_info.pingsize_given = 1;
+ args_info->pingsize_given = 1;
+ args_info->pingsize_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->pingsize_orig)
+ free(args_info->pingsize_orig); /* free previous string */
+ args_info->pingsize_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Number of ping req to send. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "pingcount") == 0) {
+ if (local_args_info.pingcount_given) {
+ fprintf(stderr,
+ "%s: `--pingcount' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->pingcount_given && !override)
+ continue;
+ local_args_info.pingcount_given = 1;
+ args_info->pingcount_given = 1;
+ args_info->pingcount_arg =
+ strtol(optarg, &stop_char, 0);
+ if (!(stop_char && *stop_char == '\0')) {
+ fprintf(stderr,
+ "%s: invalid numeric value: %s\n",
+ argv[0], optarg);
+ goto failure;
+ }
+ if (args_info->pingcount_orig)
+ free(args_info->pingcount_orig); /* free previous string */
+ args_info->pingcount_orig =
+ gengetopt_strdup(optarg);
+ }
+ /* Do not print ping packet info. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "pingquiet") == 0) {
+ if (local_args_info.pingquiet_given) {
+ fprintf(stderr,
+ "%s: `--pingquiet' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->pingquiet_given && !override)
+ continue;
+ local_args_info.pingquiet_given = 1;
+ args_info->pingquiet_given = 1;
+ args_info->pingquiet_flag =
+ !(args_info->pingquiet_flag);
+ }
+ /* Do not send recovery. */
+ else if (strcmp
+ (long_options[option_index].name,
+ "norecovery") == 0) {
+ if (local_args_info.norecovery_given) {
+ fprintf(stderr,
+ "%s: `--norecovery' option given more than once%s\n",
+ argv[0],
+ (additional_error ?
+ additional_error : ""));
+ goto failure;
+ }
+ if (args_info->norecovery_given && !override)
+ continue;
+ local_args_info.norecovery_given = 1;
+ args_info->norecovery_given = 1;
+ args_info->norecovery_flag =
+ !(args_info->norecovery_flag);
+ }
+
+ break;
+ case '?': /* Invalid option. */
+ /* `getopt_long' already printed an error message. */
+ goto failure;
+
+ default: /* bug: option not considered. */
+ fprintf(stderr, "%s: option unknown: %c%s\n",
+ CMDLINE_PARSER_PACKAGE, c,
+ (additional_error ? additional_error : ""));
+ abort();
+ } /* switch */
+ } /* while */
+
+ cmdline_parser_release(&local_args_info);
+
+ if (error)
+ return (EXIT_FAILURE);
+
+ return 0;
failure:
-
- cmdline_parser_release (&local_args_info);
- return (EXIT_FAILURE);
+
+ cmdline_parser_release(&local_args_info);
+ return (EXIT_FAILURE);
}
#ifndef CONFIG_FILE_LINE_SIZE
@@ -1587,168 +1759,167 @@ failure:
#define CONFIG_FILE_LINE_BUFFER_SIZE (CONFIG_FILE_LINE_SIZE+3)
/* 3 is for "--" and "=" */
-char my_argv[CONFIG_FILE_LINE_BUFFER_SIZE+1];
+char my_argv[CONFIG_FILE_LINE_BUFFER_SIZE + 1];
int
-cmdline_parser_configfile (char * const filename, struct gengetopt_args_info *args_info, int override, int initialize, int check_required)
+cmdline_parser_configfile(char *const filename,
+ struct gengetopt_args_info *args_info, int override,
+ int initialize, int check_required)
{
- FILE* file;
- char linebuf[CONFIG_FILE_LINE_SIZE];
- int line_num = 0;
- int i, result, equal;
- char *fopt, *farg;
- char *str_index;
- size_t len, next_token;
- char delimiter;
- int my_argc = 0;
- char **my_argv_arg;
- char *additional_error;
-
- /* store the program name */
- cmd_line_list_tmp = (struct line_list *) malloc (sizeof (struct line_list));
- cmd_line_list_tmp->next = cmd_line_list;
- cmd_line_list = cmd_line_list_tmp;
- cmd_line_list->string_arg = gengetopt_strdup (CMDLINE_PARSER_PACKAGE);
-
- if ((file = fopen(filename, "r")) == NULL)
- {
- fprintf (stderr, "%s: Error opening configuration file '%s'\n",
- CMDLINE_PARSER_PACKAGE, filename);
- result = EXIT_FAILURE;
- goto conf_failure;
- }
-
- while ((fgets(linebuf, CONFIG_FILE_LINE_SIZE, file)) != NULL)
- {
- ++line_num;
- my_argv[0] = '\0';
- len = strlen(linebuf);
- if (len > (CONFIG_FILE_LINE_BUFFER_SIZE-1))
- {
- fprintf (stderr, "%s:%s:%d: Line too long in configuration file\n",
- CMDLINE_PARSER_PACKAGE, filename, line_num);
- result = EXIT_FAILURE;
- goto conf_failure;
- }
-
- /* find first non-whitespace character in the line */
- next_token = strspn ( linebuf, " \t\r\n");
- str_index = linebuf + next_token;
-
- if ( str_index[0] == '\0' || str_index[0] == '#')
- continue; /* empty line or comment line is skipped */
-
- fopt = str_index;
-
- /* truncate fopt at the end of the first non-valid character */
- next_token = strcspn (fopt, " \t\r\n=");
-
- if (fopt[next_token] == '\0') /* the line is over */
- {
- farg = NULL;
- equal = 0;
- goto noarg;
- }
-
- /* remember if equal sign is present */
- equal = (fopt[next_token] == '=');
- fopt[next_token++] = '\0';
-
- /* advance pointers to the next token after the end of fopt */
- next_token += strspn (fopt + next_token, " \t\r\n");
- /* check for the presence of equal sign, and if so, skip it */
- if ( !equal )
- if ((equal = (fopt[next_token] == '=')))
- {
- next_token++;
- next_token += strspn (fopt + next_token, " \t\r\n");
- }
- str_index += next_token;
-
- /* find argument */
- farg = str_index;
- if ( farg[0] == '\"' || farg[0] == '\'' )
- { /* quoted argument */
- str_index = strchr (++farg, str_index[0] ); /* skip opening quote */
- if (! str_index)
- {
- fprintf
- (stderr,
- "%s:%s:%d: unterminated string in configuration file\n",
- CMDLINE_PARSER_PACKAGE, filename, line_num);
- result = EXIT_FAILURE;
- goto conf_failure;
- }
- }
- else
- { /* read up the remaining part up to a delimiter */
- next_token = strcspn (farg, " \t\r\n#\'\"");
- str_index += next_token;
- }
-
- /* truncate farg at the delimiter and store it for further check */
- delimiter = *str_index, *str_index++ = '\0';
-
- /* everything but comment is illegal at the end of line */
- if (delimiter != '\0' && delimiter != '#')
- {
- str_index += strspn(str_index, " \t\r\n");
- if (*str_index != '\0' && *str_index != '#')
- {
- fprintf
- (stderr,
- "%s:%s:%d: malformed string in configuration file\n",
- CMDLINE_PARSER_PACKAGE, filename, line_num);
- result = EXIT_FAILURE;
- goto conf_failure;
- }
- }
-
- noarg:
- ++my_argc;
- len = strlen(fopt);
-
- strcat (my_argv, len > 1 ? "--" : "-");
- strcat (my_argv, fopt);
- if (len > 1 && ((farg &&*farg) || equal))
- strcat (my_argv, "=");
- if (farg && *farg)
- strcat (my_argv, farg);
-
- cmd_line_list_tmp = (struct line_list *) malloc (sizeof (struct line_list));
- cmd_line_list_tmp->next = cmd_line_list;
- cmd_line_list = cmd_line_list_tmp;
- cmd_line_list->string_arg = gengetopt_strdup(my_argv);
- } /* while */
-
- ++my_argc; /* for program name */
- my_argv_arg = (char **) malloc((my_argc+1) * sizeof(char *));
- cmd_line_list_tmp = cmd_line_list;
- for (i = my_argc - 1; i >= 0; --i) {
- my_argv_arg[i] = cmd_line_list_tmp->string_arg;
- cmd_line_list_tmp = cmd_line_list_tmp->next;
- }
- my_argv_arg[my_argc] = 0;
-
- additional_error = (char *)malloc(strlen(filename) + strlen(ADDITIONAL_ERROR) + 1);
- strcpy (additional_error, ADDITIONAL_ERROR);
- strcat (additional_error, filename);
- result =
- cmdline_parser_internal (my_argc, my_argv_arg, args_info, override, initialize, check_required, additional_error);
-
- free (additional_error);
- free (my_argv_arg);
+ FILE *file;
+ char linebuf[CONFIG_FILE_LINE_SIZE];
+ int line_num = 0;
+ int i, result, equal;
+ char *fopt, *farg;
+ char *str_index;
+ size_t len, next_token;
+ char delimiter;
+ int my_argc = 0;
+ char **my_argv_arg;
+ char *additional_error;
+
+ /* store the program name */
+ cmd_line_list_tmp =
+ (struct line_list *)malloc(sizeof(struct line_list));
+ cmd_line_list_tmp->next = cmd_line_list;
+ cmd_line_list = cmd_line_list_tmp;
+ cmd_line_list->string_arg = gengetopt_strdup(CMDLINE_PARSER_PACKAGE);
+
+ if ((file = fopen(filename, "r")) == NULL) {
+ fprintf(stderr, "%s: Error opening configuration file '%s'\n",
+ CMDLINE_PARSER_PACKAGE, filename);
+ result = EXIT_FAILURE;
+ goto conf_failure;
+ }
+
+ while ((fgets(linebuf, CONFIG_FILE_LINE_SIZE, file)) != NULL) {
+ ++line_num;
+ my_argv[0] = '\0';
+ len = strlen(linebuf);
+ if (len > (CONFIG_FILE_LINE_BUFFER_SIZE - 1)) {
+ fprintf(stderr,
+ "%s:%s:%d: Line too long in configuration file\n",
+ CMDLINE_PARSER_PACKAGE, filename, line_num);
+ result = EXIT_FAILURE;
+ goto conf_failure;
+ }
+
+ /* find first non-whitespace character in the line */
+ next_token = strspn(linebuf, " \t\r\n");
+ str_index = linebuf + next_token;
+
+ if (str_index[0] == '\0' || str_index[0] == '#')
+ continue; /* empty line or comment line is skipped */
+
+ fopt = str_index;
+
+ /* truncate fopt at the end of the first non-valid character */
+ next_token = strcspn(fopt, " \t\r\n=");
+
+ if (fopt[next_token] == '\0') { /* the line is over */
+ farg = NULL;
+ equal = 0;
+ goto noarg;
+ }
+
+ /* remember if equal sign is present */
+ equal = (fopt[next_token] == '=');
+ fopt[next_token++] = '\0';
+
+ /* advance pointers to the next token after the end of fopt */
+ next_token += strspn(fopt + next_token, " \t\r\n");
+ /* check for the presence of equal sign, and if so, skip it */
+ if (!equal)
+ if ((equal = (fopt[next_token] == '='))) {
+ next_token++;
+ next_token +=
+ strspn(fopt + next_token, " \t\r\n");
+ }
+ str_index += next_token;
+
+ /* find argument */
+ farg = str_index;
+ if (farg[0] == '\"' || farg[0] == '\'') { /* quoted argument */
+ str_index = strchr(++farg, str_index[0]); /* skip opening quote */
+ if (!str_index) {
+ fprintf
+ (stderr,
+ "%s:%s:%d: unterminated string in configuration file\n",
+ CMDLINE_PARSER_PACKAGE, filename,
+ line_num);
+ result = EXIT_FAILURE;
+ goto conf_failure;
+ }
+ } else { /* read up the remaining part up to a delimiter */
+ next_token = strcspn(farg, " \t\r\n#\'\"");
+ str_index += next_token;
+ }
+
+ /* truncate farg at the delimiter and store it for further check */
+ delimiter = *str_index, *str_index++ = '\0';
+
+ /* everything but comment is illegal at the end of line */
+ if (delimiter != '\0' && delimiter != '#') {
+ str_index += strspn(str_index, " \t\r\n");
+ if (*str_index != '\0' && *str_index != '#') {
+ fprintf
+ (stderr,
+ "%s:%s:%d: malformed string in configuration file\n",
+ CMDLINE_PARSER_PACKAGE, filename,
+ line_num);
+ result = EXIT_FAILURE;
+ goto conf_failure;
+ }
+ }
+
+noarg:
+ ++my_argc;
+ len = strlen(fopt);
+
+ strcat(my_argv, len > 1 ? "--" : "-");
+ strcat(my_argv, fopt);
+ if (len > 1 && ((farg && *farg) || equal))
+ strcat(my_argv, "=");
+ if (farg && *farg)
+ strcat(my_argv, farg);
+
+ cmd_line_list_tmp =
+ (struct line_list *)malloc(sizeof(struct line_list));
+ cmd_line_list_tmp->next = cmd_line_list;
+ cmd_line_list = cmd_line_list_tmp;
+ cmd_line_list->string_arg = gengetopt_strdup(my_argv);
+ } /* while */
+
+ ++my_argc; /* for program name */
+ my_argv_arg = (char **)malloc((my_argc + 1) * sizeof(char *));
+ cmd_line_list_tmp = cmd_line_list;
+ for (i = my_argc - 1; i >= 0; --i) {
+ my_argv_arg[i] = cmd_line_list_tmp->string_arg;
+ cmd_line_list_tmp = cmd_line_list_tmp->next;
+ }
+ my_argv_arg[my_argc] = 0;
+
+ additional_error =
+ (char *)malloc(strlen(filename) + strlen(ADDITIONAL_ERROR) + 1);
+ strcpy(additional_error, ADDITIONAL_ERROR);
+ strcat(additional_error, filename);
+ result =
+ cmdline_parser_internal(my_argc, my_argv_arg, args_info, override,
+ initialize, check_required,
+ additional_error);
+
+ free(additional_error);
+ free(my_argv_arg);
conf_failure:
- if (file)
- fclose(file);
-
- free_cmd_list();
- if (result == EXIT_FAILURE)
- {
- cmdline_parser_free (args_info);
- exit (EXIT_FAILURE);
- }
-
- return result;
+ if (file)
+ fclose(file);
+
+ free_cmd_list();
+ if (result == EXIT_FAILURE) {
+ cmdline_parser_free(args_info);
+ exit(EXIT_FAILURE);
+ }
+
+ return result;
}