summaryrefslogtreecommitdiffstats
path: root/toolbox/ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'toolbox/ioctl.c')
-rw-r--r--toolbox/ioctl.c125
1 files changed, 0 insertions, 125 deletions
diff --git a/toolbox/ioctl.c b/toolbox/ioctl.c
deleted file mode 100644
index e28f2a4..0000000
--- a/toolbox/ioctl.c
+++ /dev/null
@@ -1,125 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <linux/kd.h>
-#include <linux/vt.h>
-#include <errno.h>
-#include <pthread.h>
-
-int ioctl_main(int argc, char *argv[])
-{
- int c;
- int fd;
- int res;
-
- int read_only = 0;
- int length = -1;
- int arg_size = 4;
- int direct_arg = 0;
- uint32_t ioctl_nr;
- void *ioctl_args;
- uint8_t *ioctl_argp;
- uint8_t *ioctl_argp_save;
- int rem;
-
- do {
- c = getopt(argc, argv, "rdl:a:h");
- if (c == EOF)
- break;
- switch (c) {
- case 'r':
- read_only = 1;
- break;
- case 'd':
- direct_arg = 1;
- break;
- case 'l':
- length = strtol(optarg, NULL, 0);
- break;
- case 'a':
- arg_size = strtol(optarg, NULL, 0);
- break;
- case 'h':
- fprintf(stderr, "%s [-l <length>] [-a <argsize>] [-rdh] <device> <ioctlnr>\n"
- " -l <lenght> Length of io buffer\n"
- " -a <argsize> Size of each argument (1-8)\n"
- " -r Open device in read only mode\n"
- " -d Direct argument (no iobuffer)\n"
- " -h Print help\n", argv[0]);
- return -1;
- case '?':
- fprintf(stderr, "%s: invalid option -%c\n",
- argv[0], optopt);
- exit(1);
- }
- } while (1);
-
- if(optind + 2 > argc) {
- fprintf(stderr, "%s: too few arguments\n", argv[0]);
- exit(1);
- }
-
- fd = open(argv[optind], O_RDWR | O_SYNC);
- if (fd < 0) {
- fprintf(stderr, "cannot open %s\n", argv[optind]);
- return 1;
- }
- optind++;
-
- ioctl_nr = strtol(argv[optind], NULL, 0);
- optind++;
-
- if(direct_arg) {
- arg_size = 4;
- length = 4;
- }
-
- if(length < 0) {
- length = (argc - optind) * arg_size;
- }
- if(length) {
- ioctl_args = calloc(1, length);
-
- ioctl_argp_save = ioctl_argp = ioctl_args;
- rem = length;
- while(optind < argc) {
- uint64_t tmp = strtoull(argv[optind], NULL, 0);
- if(rem < arg_size) {
- fprintf(stderr, "%s: too many arguments\n", argv[0]);
- exit(1);
- }
- memcpy(ioctl_argp, &tmp, arg_size);
- ioctl_argp += arg_size;
- rem -= arg_size;
- optind++;
- }
- }
- printf("sending ioctl 0x%x", ioctl_nr);
- rem = length;
- while(rem--) {
- printf(" 0x%02x", *ioctl_argp_save++);
- }
- printf("\n");
-
- if(direct_arg)
- res = ioctl(fd, ioctl_nr, *(uint32_t*)ioctl_args);
- else if(length)
- res = ioctl(fd, ioctl_nr, ioctl_args);
- else
- res = ioctl(fd, ioctl_nr, 0);
- if (res < 0) {
- fprintf(stderr, "ioctl 0x%x failed, %d\n", ioctl_nr, res);
- return 1;
- }
- if(length) {
- printf("return buf:");
- ioctl_argp = ioctl_args;
- rem = length;
- while(rem--) {
- printf(" %02x", *ioctl_argp++);
- }
- printf("\n");
- }
- return 0;
-}