summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-02-10 08:22:22 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-02-10 09:33:18 +1000
commit2416568475cc47eb9ca3a0175904382cb75a9ecc (patch)
tree8b1bb857f3ab683f113f1df6f012391b91354f69
parent5831e2d43ab796b0bc0171078cb8a7586a60d2a8 (diff)
Factor out argument parsing.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--evtest.c42
1 files changed, 29 insertions, 13 deletions
diff --git a/evtest.c b/evtest.c
index 97bbda2..9a9abac 100644
--- a/evtest.c
+++ b/evtest.c
@@ -28,6 +28,8 @@
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
*/
+#define _GNU_SOURCE /* for asprintf */
+#include <stdio.h>
#include <stdint.h>
#include <linux/version.h>
@@ -473,16 +475,9 @@ static void usage(void)
printf("Where X = input device number\n");
}
-int main (int argc, char **argv)
+static char* parse_args(int argc, char **argv)
{
- int fd, rd, i, j, k;
- struct input_event ev[64];
- int version;
- unsigned short id[4];
- unsigned long bit[EV_MAX][NBITS(KEY_MAX)];
- char name[256] = "Unknown";
- int abs[6] = {0};
- char filename[64] = {0};
+ char *filename;
if (argc < 2) {
int dev;
@@ -497,19 +492,40 @@ int main (int argc, char **argv)
if (dev == -1)
{
usage();
- return 1;
+ return NULL;
}
- snprintf(filename, sizeof(filename),
- "%s/%s%d", DEV_INPUT_EVENT, EVENT_DEV_NAME, dev);
+ asprintf(&filename, "%s/%s%d", DEV_INPUT_EVENT, EVENT_DEV_NAME, dev);
} else
- strncpy(filename, argv[argc - 1], sizeof(filename));
+ filename = strdup(argv[argc - 1]);
+
+ return filename;
+}
+
+
+int main (int argc, char **argv)
+{
+ int fd, rd, i, j, k;
+ struct input_event ev[64];
+ int version;
+ unsigned short id[4];
+ unsigned long bit[EV_MAX][NBITS(KEY_MAX)];
+ char name[256] = "Unknown";
+ int abs[6] = {0};
+ char *filename;
+
+ filename = parse_args(argc, argv);
+
+ if (!filename)
+ return 1;
if ((fd = open(filename, O_RDONLY)) < 0) {
perror("evtest");
return 1;
}
+ free(filename);
+
if (ioctl(fd, EVIOCGVERSION, &version)) {
perror("evtest: can't get version");
return 1;