1
+ #include <limits.h>
1
2
#include <stdio.h>
2
3
#include <stdlib.h>
3
4
#include <string.h>
@@ -62,34 +63,37 @@ static void print_usage(const char *argv0) {
62
63
63
64
static void print_version () { puts (VERSION ); }
64
65
65
- #define CLI_OPTIONS_ID_SOCKET_GROUP -42
66
- #define CLI_OPTIONS_ID_VMNET_MODE -43
67
- #define CLI_OPTIONS_ID_VMNET_INTERFACE -44
68
- #define CLI_OPTIONS_ID_VMNET_GATEWAY -45
69
- #define CLI_OPTIONS_ID_VMNET_DHCP_END -46
70
- #define CLI_OPTIONS_ID_VMNET_MASK -47
71
- #define CLI_OPTIONS_ID_VMNET_INTERFACE_ID -48
72
- #define CLI_OPTIONS_ID_VMNET_NAT66_PREFIX -50
66
+ enum {
67
+ CLI_OPT_SOCKET_GROUP = CHAR_MAX + 1 ,
68
+ CLI_OPT_VMNET_MODE ,
69
+ CLI_OPT_VMNET_INTERFACE ,
70
+ CLI_OPT_VMNET_GATEWAY ,
71
+ CLI_OPT_VMNET_DHCP_END ,
72
+ CLI_OPT_VMNET_MASK ,
73
+ CLI_OPT_VMNET_INTERFACE_ID ,
74
+ CLI_OPT_VMNET_NAT66_PREFIX ,
75
+ };
76
+
73
77
struct cli_options * cli_options_parse (int argc , char * argv []) {
74
- struct cli_options * res = malloc ( sizeof (* res ));
78
+ struct cli_options * res = calloc ( 1 , sizeof (* res ));
75
79
if (res == NULL ) {
76
- goto error ;
80
+ perror ("calloc" );
81
+ exit (EXIT_FAILURE );
77
82
}
78
- memset (res , 0 , sizeof (* res ));
79
83
80
84
const struct option longopts [] = {
81
- {"socket-group" , required_argument , NULL , CLI_OPTIONS_ID_SOCKET_GROUP },
82
- {"vmnet-mode" , required_argument , NULL , CLI_OPTIONS_ID_VMNET_MODE },
85
+ {"socket-group" , required_argument , NULL , CLI_OPT_SOCKET_GROUP },
86
+ {"vmnet-mode" , required_argument , NULL , CLI_OPT_VMNET_MODE },
83
87
{"vmnet-interface" , required_argument , NULL ,
84
- CLI_OPTIONS_ID_VMNET_INTERFACE },
85
- {"vmnet-gateway" , required_argument , NULL , CLI_OPTIONS_ID_VMNET_GATEWAY },
88
+ CLI_OPT_VMNET_INTERFACE },
89
+ {"vmnet-gateway" , required_argument , NULL , CLI_OPT_VMNET_GATEWAY },
86
90
{"vmnet-dhcp-end" , required_argument , NULL ,
87
- CLI_OPTIONS_ID_VMNET_DHCP_END },
88
- {"vmnet-mask" , required_argument , NULL , CLI_OPTIONS_ID_VMNET_MASK },
91
+ CLI_OPT_VMNET_DHCP_END },
92
+ {"vmnet-mask" , required_argument , NULL , CLI_OPT_VMNET_MASK },
89
93
{"vmnet-interface-id" , required_argument , NULL ,
90
- CLI_OPTIONS_ID_VMNET_INTERFACE_ID },
94
+ CLI_OPT_VMNET_INTERFACE_ID },
91
95
{"vmnet-nat66-prefix" , required_argument , NULL ,
92
- CLI_OPTIONS_ID_VMNET_NAT66_PREFIX },
96
+ CLI_OPT_VMNET_NAT66_PREFIX },
93
97
{"pidfile" , required_argument , NULL , 'p' },
94
98
{"help" , no_argument , NULL , 'h' },
95
99
{"version" , no_argument , NULL , 'v' },
@@ -98,10 +102,10 @@ struct cli_options *cli_options_parse(int argc, char *argv[]) {
98
102
int opt = 0 ;
99
103
while ((opt = getopt_long (argc , argv , "hvp" , longopts , NULL )) != -1 ) {
100
104
switch (opt ) {
101
- case CLI_OPTIONS_ID_SOCKET_GROUP :
105
+ case CLI_OPT_SOCKET_GROUP :
102
106
res -> socket_group = strdup (optarg );
103
107
break ;
104
- case CLI_OPTIONS_ID_VMNET_MODE :
108
+ case CLI_OPT_VMNET_MODE :
105
109
if (strcmp (optarg , "host" ) == 0 ) {
106
110
res -> vmnet_mode = VMNET_HOST_MODE ;
107
111
} else if (strcmp (optarg , "shared" ) == 0 ) {
@@ -113,41 +117,37 @@ struct cli_options *cli_options_parse(int argc, char *argv[]) {
113
117
goto error ;
114
118
}
115
119
break ;
116
- case CLI_OPTIONS_ID_VMNET_INTERFACE :
120
+ case CLI_OPT_VMNET_INTERFACE :
117
121
res -> vmnet_interface = strdup (optarg );
118
122
break ;
119
- case CLI_OPTIONS_ID_VMNET_GATEWAY :
123
+ case CLI_OPT_VMNET_GATEWAY :
120
124
res -> vmnet_gateway = strdup (optarg );
121
125
break ;
122
- case CLI_OPTIONS_ID_VMNET_DHCP_END :
126
+ case CLI_OPT_VMNET_DHCP_END :
123
127
res -> vmnet_dhcp_end = strdup (optarg );
124
128
break ;
125
- case CLI_OPTIONS_ID_VMNET_MASK :
129
+ case CLI_OPT_VMNET_MASK :
126
130
res -> vmnet_mask = strdup (optarg );
127
131
break ;
128
- case CLI_OPTIONS_ID_VMNET_INTERFACE_ID :
132
+ case CLI_OPT_VMNET_INTERFACE_ID :
129
133
if (uuid_parse (optarg , res -> vmnet_interface_id ) < 0 ) {
130
134
fprintf (stderr , "Failed to parse UUID \"%s\"\n" , optarg );
131
135
goto error ;
132
136
}
133
137
break ;
134
- case CLI_OPTIONS_ID_VMNET_NAT66_PREFIX :
138
+ case CLI_OPT_VMNET_NAT66_PREFIX :
135
139
res -> vmnet_nat66_prefix = strdup (optarg );
136
140
break ;
137
141
case 'p' :
138
142
res -> pidfile = strdup (optarg );
139
143
break ;
140
144
case 'h' :
141
145
print_usage (argv [0 ]);
142
- cli_options_destroy (res );
143
146
exit (EXIT_SUCCESS );
144
- return NULL ;
145
147
break ;
146
148
case 'v' :
147
149
print_version ();
148
- cli_options_destroy (res );
149
150
exit (EXIT_SUCCESS );
150
- return NULL ;
151
151
break ;
152
152
default :
153
153
goto error ;
@@ -229,29 +229,19 @@ struct cli_options *cli_options_parse(int argc, char *argv[]) {
229
229
return res ;
230
230
error :
231
231
print_usage (argv [0 ]);
232
- cli_options_destroy (res );
233
232
exit (EXIT_FAILURE );
234
- return NULL ;
235
233
}
236
234
237
235
void cli_options_destroy (struct cli_options * x ) {
238
236
if (x == NULL )
239
237
return ;
240
- if (x -> socket_group != NULL )
241
- free (x -> socket_group );
242
- if (x -> socket_path != NULL )
243
- free (x -> socket_path );
244
- if (x -> vmnet_interface != NULL )
245
- free (x -> vmnet_interface );
246
- if (x -> vmnet_gateway != NULL )
247
- free (x -> vmnet_gateway );
248
- if (x -> vmnet_dhcp_end != NULL )
249
- free (x -> vmnet_dhcp_end );
250
- if (x -> vmnet_mask != NULL )
251
- free (x -> vmnet_mask );
252
- if (x -> vmnet_nat66_prefix != NULL )
253
- free (x -> vmnet_nat66_prefix );
254
- if (x -> pidfile != NULL )
255
- free (x -> pidfile );
238
+ free (x -> socket_group );
239
+ free (x -> socket_path );
240
+ free (x -> vmnet_interface );
241
+ free (x -> vmnet_gateway );
242
+ free (x -> vmnet_dhcp_end );
243
+ free (x -> vmnet_mask );
244
+ free (x -> vmnet_nat66_prefix );
245
+ free (x -> pidfile );
256
246
free (x );
257
247
}
0 commit comments