tools: fix tweak-device option parsing

https://bugs.freedesktop.org/show_bug.cgi?id=92880

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2015-11-10 10:08:12 +10:00
parent e11662ac72
commit a95ca2c821

View file

@ -238,7 +238,7 @@ error:
} }
static enum mode static enum mode
parse_options_mode(int argc, char **argv, const char **path) parse_options_mode(int argc, char **argv)
{ {
int c; int c;
int option_index = 0; int option_index = 0;
@ -254,7 +254,7 @@ parse_options_mode(int argc, char **argv, const char **path)
if (argc < 2) if (argc < 2)
return mode; return mode;
while (1) { while (mode == MODE_NONE) {
c = getopt_long(argc, argv, "h", opts, &option_index); c = getopt_long(argc, argv, "h", opts, &option_index);
if (c == -1) if (c == -1)
break; break;
@ -278,11 +278,9 @@ parse_options_mode(int argc, char **argv, const char **path)
} }
} }
if (optind >= argc) if (optind >= argc && mode != MODE_HELP)
return MODE_NONE; return MODE_NONE;
*path = argv[optind];
return mode; return mode;
} }
@ -368,7 +366,7 @@ main(int argc, char **argv)
{ {
struct libevdev *dev = NULL; struct libevdev *dev = NULL;
int fd = -1; int fd = -1;
int rc = 1; int rc = EXIT_FAILURE;
enum mode mode; enum mode mode;
const char *path; const char *path;
struct input_absinfo absinfo; struct input_absinfo absinfo;
@ -379,7 +377,7 @@ main(int argc, char **argv)
int xres = 0, int xres = 0,
yres = 0; yres = 0;
mode = parse_options_mode(argc, argv, &path); mode = parse_options_mode(argc, argv);
switch (mode) { switch (mode) {
case MODE_HELP: case MODE_HELP:
rc = EXIT_SUCCESS; rc = EXIT_SUCCESS;
@ -407,8 +405,17 @@ main(int argc, char **argv)
if (rc != EXIT_SUCCESS) if (rc != EXIT_SUCCESS)
goto out; goto out;
if (optind >= argc) {
rc = EXIT_FAILURE;
usage();
goto out;
}
path = argv[optind];
fd = open(path, O_RDWR); fd = open(path, O_RDWR);
if (fd < 0) { if (fd < 0) {
rc = EXIT_FAILURE;
perror("Failed to open device"); perror("Failed to open device");
goto out; goto out;
} }