From d65d0510cd20a55a08b64f476714b229c5436396 Mon Sep 17 00:00:00 2001 From: Max Krasnyansky Date: Mon, 22 Apr 2002 20:43:10 +0000 Subject: Argument parsing fixes --- tools/hciconfig.c | 38 +++++++++++++++++++++++++------------- tools/hcitool.c | 2 +- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/tools/hciconfig.c b/tools/hciconfig.c index 21f7bc1c..4b4844ff 100644 --- a/tools/hciconfig.c +++ b/tools/hciconfig.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -580,55 +581,66 @@ void usage(void) command[i].doc); } -int main(int argc, char *argv[], char *env[]) +static struct option main_options[] = { + {"help", 0,0, 'h'}, + {"all", 0,0, 'a'}, + {0, 0, 0, 0} +}; + +int main(int argc, char **argv, char **env) { int opt, ctl, i, cmd=0; - char *dev; - while ((opt=getopt(argc, argv,"ha")) != EOF) { + while ((opt=getopt_long(argc, argv, "ah", main_options, NULL)) != -1) { switch(opt) { case 'a': all = 1; break; + case 'h': + default: usage(); exit(0); } } + argc -= optind; + argv += optind; + optind = 0; + /* Open HCI socket */ if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0) { perror("Can't open HCI socket."); exit(1); } - if (argc - optind < 1) { + if (argc < 1) { print_dev_list(ctl, 0); exit(0); } - dev = strdup(argv[optind]); - di.dev_id = atoi(argv[optind]+3); - optind++; + di.dev_id = atoi(argv[0] + 3); + argc--; argv++; if (ioctl(ctl, HCIGETDEVINFO, (void*)&di)) { perror("Can't get device info"); exit(1); } - while (optind < argc) { + while (argc > 0) { for (i=0; command[i].cmd; i++) { - if (strncmp(command[i].cmd, argv[optind],4)) + if (strncmp(command[i].cmd, *argv, 4)) continue; - if (command[i].opt) - optind++; + if (command[i].opt) { + argc--; argv++; + } - command[i].func(ctl, di.dev_id, argv[optind]); + command[i].func(ctl, di.dev_id, *argv); cmd = 1; break; } - optind++; + argc--; argv++; } if (!cmd) diff --git a/tools/hcitool.c b/tools/hcitool.c index 06c426ca..8ec564d7 100644 --- a/tools/hcitool.c +++ b/tools/hcitool.c @@ -783,7 +783,7 @@ static void usage(void) { int i; - printf("hcitool - HCI Tool\n"); + printf("hcitool - HCI Tool ver %s\n", VERSION); printf("Usage:\n" "\thcitool [options] [command parameters]\n"); printf("Options:\n" -- cgit