X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=ao-tools%2Fao-chaosread%2Fao-chaosread.c;h=6d860139f71487a59dbd3f9d8e6433532fa018b4;hb=456c27a7ed26e4edde02aa0a0b8ef4f46f1ea464;hp=ca7b65a7c89074d5e75ac6b11490dacd5fe78f5b;hpb=3bdc9028502c766d1c8ddb4f0dedba4bbc22384e;p=fw%2Faltos diff --git a/ao-tools/ao-chaosread/ao-chaosread.c b/ao-tools/ao-chaosread/ao-chaosread.c index ca7b65a7..6d860139 100644 --- a/ao-tools/ao-chaosread/ao-chaosread.c +++ b/ao-tools/ao-chaosread/ao-chaosread.c @@ -74,7 +74,7 @@ chaoskey_match(libusb_device *dev, char *match_serial) goto out; } - ret = libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, device_serial, match_len + 1); + ret = libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, (unsigned char *) device_serial, match_len + 1); if (ret < 0) { fprintf(stderr, "failed to get serial number: %s\n", libusb_strerror(ret)); @@ -91,7 +91,6 @@ chaoskey_match(libusb_device *dev, char *match_serial) return handle; out: - free(device_serial); if (handle) libusb_close(handle); return 0; @@ -104,7 +103,6 @@ chaoskey_open(char *serial) int ret; ssize_t num; libusb_device **list; - libusb_device *device = NULL; int d; ck = calloc(sizeof (struct chaoskey), 1); @@ -174,12 +172,6 @@ chaoskey_close(struct chaoskey *ck) free(ck); } -void -chaoskey_transfer_callback(struct libusb_transfer *transfer) -{ - struct chaoskey *ck = transfer->user_data; -} - #define ENDPOINT 0x86 int @@ -203,7 +195,9 @@ chaoskey_read(struct chaoskey *ck, void *buffer, int len) } len -= transferred; buf += transferred; + total += transferred; } + return total; } static const struct option options[] = { @@ -235,7 +229,7 @@ main (int argc, char **argv) int infinite = 0; int bytes = 0; - while ((c = getopt_long(argc, argv, "s:l:", options, NULL)) != -1) { + while ((c = getopt_long(argc, argv, "s:l:ib", options, NULL)) != -1) { switch (c) { case 's': serial = optarg; @@ -284,8 +278,17 @@ main (int argc, char **argv) int i; for (i = 0; i < got / 2; i++) putchar((buf[i] >> 1 & 0xff)); - } else - write(1, buf, got); + } else { + int i; + int ret; + for (i = 0; i < got; i += ret) { + ret = write(1, ((char *) buf) + i, got - i); + if (ret <= 0) { + perror("write"); + exit(1); + } + } + } length -= got; } exit(0);