[Replicant] [libsamsung-ipc] [PATCH 23/26] tools: ipc-modem: move command line parsing in its own function
Denis 'GNUtoo' Carikli
GNUtoo at cyberdimension.org
Mon Mar 28 20:20:37 UTC 2022
This makes the code easier to read as the command line parsing
code is quite big, and now it's not mixed in the main function
anymore.
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo at cyberdimension.org>
---
tools/ipc-modem.c | 86 ++++++++++++++++++++++++++++-------------------
1 file changed, 51 insertions(+), 35 deletions(-)
diff --git a/tools/ipc-modem.c b/tools/ipc-modem.c
index 3a43ec3..039dcca 100644
--- a/tools/ipc-modem.c
+++ b/tools/ipc-modem.c
@@ -657,9 +657,8 @@ void print_cmdline_opts(struct ipc_modem_data *data)
ipc_modem_log(data->client, MODEM_LOG_INFO, "dry-run mode\n");
}
-int main(int argc, char *argv[])
+int parse_cmdline_opts(struct ipc_modem_data *data, int argc, char *argv[])
{
- struct ipc_modem_data data;
int c = 0;
int opt_i = 0;
@@ -673,13 +672,12 @@ int main(int argc, char *argv[])
{0, 0, 0, 0 }
};
- bzero((void *)&data, sizeof(data));
-
if (argc < 2) {
print_help();
exit(1);
}
+ /* Handle options arguments */
while (true) {
c = getopt_long(argc, argv, "", opt_l, &opt_i);
if (c != 0)
@@ -689,9 +687,9 @@ int main(int argc, char *argv[])
if (optarg) {
if (strlen(optarg) < 14) {
assert(strlen(optarg) <
- sizeof(data.call_number));
+ sizeof(data->call_number));
printf("[I] Got call number!\n");
- strcpy(data.call_number, optarg);
+ strcpy(data->call_number, optarg);
} else {
printf("[E] "
"Call number is too long!\n");
@@ -706,9 +704,9 @@ int main(int argc, char *argv[])
return 1;
}
} else if (strcmp(opt_l[opt_i].name, "debug") == 0) {
- data.debug = true;
+ data->debug = true;
} else if (strcmp(opt_l[opt_i].name, "dry-run") == 0) {
- data.dry_run = true;
+ data->dry_run = true;
} else if (strncmp(opt_l[opt_i].name, "help", 4) == 0) {
print_help();
exit(1);
@@ -716,10 +714,10 @@ int main(int argc, char *argv[])
(optarg)) {
if (strlen(optarg) < 8) {
assert(strlen(optarg) <
- sizeof(data.sim_pin));
+ sizeof(data->sim_pin));
printf("[I] Got SIM PIN!\n");
- strcpy(data.sim_pin, optarg);
+ strcpy(data->sim_pin, optarg);
} else {
printf("[E] SIM PIN is too long!\n");
return 1;
@@ -727,40 +725,22 @@ int main(int argc, char *argv[])
}
}
- if (data.dry_run)
- data.client = ipc_client_create(IPC_CLIENT_TYPE_DUMMY);
- else
- data.client = ipc_client_create(IPC_CLIENT_TYPE_FMT);
-
- if (data.client == 0) {
- printf("[E] Could not create IPC client; aborting ...\n");
- return 1;
- }
-
- if (data.debug == 0)
- ipc_client_log_callback_register(data.client,
- modem_log_handler_quiet,
- NULL);
- else
- ipc_client_log_callback_register(data.client,
- modem_log_handler,
- NULL);
-
+ /* Handle non options arguments */
while (optind < argc) {
if (strncmp(argv[optind], "boot", 9) == 0) {
- data.command = CMD_BOOT;
+ data->command = CMD_BOOT;
break;
} else if (strncmp(argv[optind], "power-on", 8) == 0) {
- data.command = CMD_POWER_ON;
+ data->command = CMD_POWER_ON;
break;
} else if (strncmp(argv[optind], "power-off", 9) == 0) {
- data.command = CMD_POWER_OFF;
+ data->command = CMD_POWER_OFF;
break;
} else if (strncmp(argv[optind], "start", 5) == 0) {
- data.command = CMD_START;
+ data->command = CMD_START;
break;
} else {
- ipc_modem_log(data.client,
+ ipc_modem_log(data->client,
MODEM_LOG_ERROR,
"Unknown argument: '%s'\n",
argv[optind]);
@@ -771,7 +751,7 @@ int main(int argc, char *argv[])
optind++;
}
- if (data.command == CMD_NONE) {
+ if (data->command == CMD_NONE) {
printf("\n"
"Error: No command given. You need to use a command.\n"
" See the help below for more details.\n"
@@ -780,6 +760,42 @@ int main(int argc, char *argv[])
return 1;
}
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ struct ipc_modem_data data;
+ int ret;
+
+ bzero((void *)&data, sizeof(data));
+
+ data.client = ipc_client_create(IPC_CLIENT_TYPE_DUMMY);
+
+ ret = parse_cmdline_opts(&data, argc, argv);
+ if (ret)
+ return ret;
+
+ if (!data.dry_run) {
+ ipc_client_destroy(data.client);
+ data.client = ipc_client_create(IPC_CLIENT_TYPE_FMT);
+
+ if (data.client == 0) {
+ printf("[E] "
+ "Could not create IPC client; aborting ...\n");
+ return 1;
+ }
+ }
+
+ if (data.debug == 0)
+ ipc_client_log_callback_register(data.client,
+ modem_log_handler_quiet,
+ NULL);
+ else
+ ipc_client_log_callback_register(data.client,
+ modem_log_handler,
+ NULL);
+
print_cmdline_opts(&data);
return handle_command(&data);
--
2.35.1
More information about the Replicant
mailing list