Skip to content

Commit

Permalink
Introduce dup_config_arg() macro
Browse files Browse the repository at this point in the history
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
David Woodhouse authored and David Woodhouse committed Jul 29, 2014
1 parent c5127eb commit 9b66010
Showing 1 changed file with 21 additions and 19 deletions.
40 changes: 21 additions & 19 deletions main.c
Expand Up @@ -676,6 +676,17 @@ static void usage(void)
static FILE *config_file = NULL;
static int config_line_num = 0;

static char *xstrdup(const char *arg)
{
char *ret = strdup(arg);

if (!ret) {
fprintf(stderr, _("Failed to allocate string\n"));
exit(1);
}
return ret;
}

/* There are three ways to handle config_arg:
*
* 1. We only care about it transiently and it can be lost entirely
Expand All @@ -686,20 +697,11 @@ static int config_line_num = 0;
* For this we use the keep_config_arg() macro below.
* 3. It may be freed during normal operation, so we have to use strdup()
* even when it's an option from argv[]. (e.g. vpninfo->cert_password).
* For this we use the xstrdup() function below.
* For this we use the dup_config_arg() macro function below.
*/
#define keep_config_arg() (config_file && config_arg ? strdup(config_arg) : config_arg)
#define keep_config_arg() (config_file && config_arg ? xstrdup(config_arg) : config_arg)

static char *xstrdup(const char *arg)
{
char *ret = strdup(arg);

if (!ret) {
fprintf(stderr, _("Failed to allocate string\n"));
exit(1);
}
return ret;
}
#define dup_config_arg() xstrdup(config_arg)

static int next_option(int argc, char **argv, char **config_arg)
{
Expand Down Expand Up @@ -925,7 +927,7 @@ int main(int argc, char **argv)
/* The next option will come from the file... */
break;
case OPT_CAFILE:
openconnect_set_cafile(vpninfo, xstrdup(config_arg));
openconnect_set_cafile(vpninfo, dup_config_arg());
break;
case OPT_PIDFILE:
pidfile = keep_config_arg();
Expand All @@ -934,7 +936,7 @@ int main(int argc, char **argv)
openconnect_set_pfs(vpninfo, 1);
break;
case OPT_SERVERCERT:
openconnect_set_server_cert_sha1(vpninfo, xstrdup(config_arg));
openconnect_set_server_cert_sha1(vpninfo, dup_config_arg());
break;
case OPT_NO_DTLS:
use_dtls = 0;
Expand Down Expand Up @@ -995,12 +997,12 @@ int main(int argc, char **argv)
break;
case 'g':
free(urlpath);
urlpath = strdup(config_arg);
urlpath = dup_config_arg();
break;
case 'h':
usage();
case 'i':
ifname = xstrdup(config_arg);
ifname = dup_config_arg();
break;
case 'm': {
int mtu = atol(config_arg);
Expand All @@ -1026,7 +1028,7 @@ int main(int argc, char **argv)
autoproxy = 0;
break;
case OPT_PROXY_AUTH:
openconnect_set_proxy_auth(vpninfo, xstrdup(config_arg));
openconnect_set_proxy_auth(vpninfo, dup_config_arg());
break;
case OPT_NO_PROXY:
autoproxy = 0;
Expand All @@ -1046,7 +1048,7 @@ int main(int argc, char **argv)
nocertcheck = 1;
break;
case 's':
vpnc_script = xstrdup(config_arg);
vpnc_script = dup_config_arg();
break;
case 'u':
free(username);
Expand Down Expand Up @@ -1118,7 +1120,7 @@ int main(int argc, char **argv)
/* generic defaults */
openconnect_set_mobile_info(vpninfo,
xstrdup("1.0"),
xstrdup(config_arg),
dup_config_arg(),
xstrdup("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
}
break;
Expand Down

0 comments on commit 9b66010

Please sign in to comment.