1
0

some cleanups

This commit is contained in:
michael 2007-02-25 14:04:15 +00:00
parent fdd05738df
commit f1405f1379

View File

@ -1,13 +1,28 @@
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) /* libusb connector for XILINX impact
*
* Copyright (c) 2007 Michael Gernoth <michael@gernoth.net>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
#define _GNU_SOURCE 1 #define _GNU_SOURCE 1
#if defined(RTLD_NEXT)
#define REAL_LIBC RTLD_NEXT
#else
#define REAL_LIBC ((void *) -1L)
#endif
#include <dlfcn.h> #include <dlfcn.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdlib.h> #include <stdlib.h>
@ -38,6 +53,7 @@ static pthread_mutex_t int_wait = PTHREAD_MUTEX_INITIALIZER;
#undef DEBUG #undef DEBUG
#ifdef DEBUG #ifdef DEBUG
#define DPRINTF(format, args...) fprintf(stderr, format, ##args)
void hexdump(unsigned char *buf, int len) { void hexdump(unsigned char *buf, int len) {
int i; int i;
@ -46,7 +62,10 @@ void hexdump(unsigned char *buf, int len) {
if ((i % 16) == 15) if ((i % 16) == 15)
fprintf(stderr,"\n"); fprintf(stderr,"\n");
} }
fprintf(stderr,"\n");
} }
#else
#define DPRINTF(format, args...)
#endif #endif
int usb_deviceinfo(unsigned char *buf) { int usb_deviceinfo(unsigned char *buf) {
@ -224,15 +243,11 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
version = (struct version_struct*)(wdheader->data); version = (struct version_struct*)(wdheader->data);
strcpy(version->version, "WinDriver no more"); strcpy(version->version, "WinDriver no more");
version->versionul = 802; version->versionul = 802;
#ifdef DEBUG DPRINTF("VERSION\n");
fprintf(stderr,"faking VERSION\n");
#endif
break; break;
case LICENSE: case LICENSE:
#ifdef DEBUG DPRINTF("LICENSE\n");
fprintf(stderr,"faking LICENSE\n");
#endif
break; break;
case CARD_REGISTER: case CARD_REGISTER:
@ -242,28 +257,24 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
struct card_register* cr = (struct card_register*)(wdheader->data); struct card_register* cr = (struct card_register*)(wdheader->data);
} }
#endif #endif
#ifdef DEBUG DPRINTF("CARD_REGISTER\n");
fprintf(stderr,"faking CARD_REGISTER\n");
#endif
break; break;
case USB_TRANSFER: case USB_TRANSFER:
#ifdef DEBUG DPRINTF("in USB_TRANSFER");
fprintf(stderr,"in USB_TRANSFER");
#endif
{ {
struct usb_transfer *ut = (struct usb_transfer*)(wdheader->data); struct usb_transfer *ut = (struct usb_transfer*)(wdheader->data);
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr," unique: %lu, pipe: %lu, read: %lu, options: %lx, size: %lu, timeout: %lx\n", ut->dwUniqueID, ut->dwPipeNum, ut->fRead, ut->dwOptions, ut->dwBufferSize, ut->dwTimeout); DPRINTF(" unique: %lu, pipe: %lu, read: %lu, options: %lx, size: %lu, timeout: %lx\n",
fprintf(stderr,"setup packet: "); ut->dwUniqueID, ut->dwPipeNum, ut->fRead,
ut->dwOptions, ut->dwBufferSize, ut->dwTimeout);
DPRINTF("setup packet: ");
hexdump(ut->SetupPacket, 8); hexdump(ut->SetupPacket, 8);
fprintf(stderr,"\n");
if (!ut->fRead && ut->dwBufferSize) if (!ut->fRead && ut->dwBufferSize)
{ {
hexdump(ut->pBuffer, ut->dwBufferSize); hexdump(ut->pBuffer, ut->dwBufferSize);
fprintf(stderr,"\n");
} }
#endif #endif
@ -278,9 +289,7 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
value = ut->SetupPacket[2] | (ut->SetupPacket[3] << 8); value = ut->SetupPacket[2] | (ut->SetupPacket[3] << 8);
index = ut->SetupPacket[4] | (ut->SetupPacket[5] << 8); index = ut->SetupPacket[4] | (ut->SetupPacket[5] << 8);
size = ut->SetupPacket[6] | (ut->SetupPacket[7] << 8); size = ut->SetupPacket[6] | (ut->SetupPacket[7] << 8);
#ifdef DEBUG DPRINTF("requesttype: %x, request: %x, value: %u, index: %u, size: %u\n", requesttype, request, value, index, size);
fprintf(stderr, "requesttype: %x, request: %x, value: %u, index: %u, size: %u\n", requesttype, request, value, index, size);
#endif
ret = usb_control_msg(usb_devhandle, requesttype, request, value, index, ut->pBuffer, size, ut->dwTimeout); ret = usb_control_msg(usb_devhandle, requesttype, request, value, index, ut->pBuffer, size, ut->dwTimeout);
} else { } else {
if (ut->fRead) { if (ut->fRead) {
@ -300,27 +309,25 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
#endif #endif
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr,"Transferred: %lu (%s)\n",ut->dwBytesTransferred, (ut->fRead?"read":"write")); DPRINTF("Transferred: %lu (%s)\n",ut->dwBytesTransferred, (ut->fRead?"read":"write"));
if (ut->fRead && ut->dwBytesTransferred) if (ut->fRead && ut->dwBytesTransferred)
{ {
fprintf(stderr,"Read: "); DPRINTF("Read: ");
hexdump(ut->pBuffer, ut->dwBytesTransferred); hexdump(ut->pBuffer, ut->dwBytesTransferred);
fprintf(stderr,"\n");
} }
#endif #endif
} }
break; break;
case INT_ENABLE: case INT_ENABLE:
#ifdef DEBUG DPRINTF("INT_ENABLE\n");
fprintf(stderr,"INT_ENABLE\n");
#endif
{ {
struct interrupt *it = (struct interrupt*)(wdheader->data); struct interrupt *it = (struct interrupt*)(wdheader->data);
#ifdef DEBUG DPRINTF("Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",
fprintf(stderr,"Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n", it->hInterrupt, it->dwOptions, it->dwCmds, it->fEnableOk, it->dwCounter, it->dwLost, it->fStopped); it->hInterrupt, it->dwOptions,
#endif it->dwCmds, it->fEnableOk, it->dwCounter,
it->dwLost, it->fStopped);
it->fEnableOk = 1; it->fEnableOk = 1;
ints_enabled = 1; ints_enabled = 1;
@ -330,15 +337,14 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
break; break;
case INT_DISABLE: case INT_DISABLE:
#ifdef DEBUG DPRINTF("INT_DISABLE\n");
fprintf(stderr,"INT_DISABLE\n");
#endif
{ {
struct interrupt *it = (struct interrupt*)(wdheader->data); struct interrupt *it = (struct interrupt*)(wdheader->data);
#ifdef DEBUG DPRINTF("Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",
fprintf(stderr,"Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n", it->hInterrupt, it->dwOptions, it->dwCmds, it->fEnableOk, it->dwCounter, it->dwLost, it->fStopped); it->hInterrupt, it->dwOptions,
#endif it->dwCmds, it->fEnableOk, it->dwCounter,
it->dwLost, it->fStopped);
#ifndef NO_WINDRVR #ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl); ret = (*ioctl_func) (fd, request, wdioctl);
#else #else
@ -347,22 +353,21 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
ints_enabled = 0; ints_enabled = 0;
pthread_mutex_unlock(&int_wait); pthread_mutex_unlock(&int_wait);
#endif #endif
#ifdef DEBUG DPRINTF("Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",
fprintf(stderr,"Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n", it->hInterrupt, it->dwOptions, it->dwCmds, it->fEnableOk, it->dwCounter, it->dwLost, it->fStopped); it->hInterrupt, it->dwOptions,
#endif it->dwCmds, it->fEnableOk, it->dwCounter,
it->dwLost, it->fStopped);
} }
break; break;
case USB_SET_INTERFACE: case USB_SET_INTERFACE:
#ifdef DEBUG DPRINTF("USB_SET_INTERFACE\n");
fprintf(stderr,"USB_SET_INTERFACE\n");
#endif
{ {
struct usb_set_interface *usi = (struct usb_set_interface*)(wdheader->data); struct usb_set_interface *usi = (struct usb_set_interface*)(wdheader->data);
#ifdef DEBUG DPRINTF("unique: %lu, interfacenum: %lu, alternatesetting: %lu, options: %lx\n",
fprintf(stderr,"unique: %lu, interfacenum: %lu, alternatesetting: %lu, options: %lx\n", usi->dwUniqueID, usi->dwInterfaceNum, usi->dwAlternateSetting, usi->dwOptions); usi->dwUniqueID, usi->dwInterfaceNum,
#endif usi->dwAlternateSetting, usi->dwOptions);
#ifndef NO_WINDRVR #ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl); ret = (*ioctl_func) (fd, request, wdioctl);
#else #else
@ -381,27 +386,28 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
fprintf(stderr, "usb_set_configuration: %d (%s)\n", ret, usb_strerror()); fprintf(stderr, "usb_set_configuration: %d (%s)\n", ret, usb_strerror());
} }
} else { } else {
fprintf(stderr, "usb_claim_interface: %d -> %d (%s)\n", usbdevice->config[0].interface[usi->dwInterfaceNum].altsetting[usi->dwAlternateSetting].bInterfaceNumber, ret, usb_strerror()); fprintf(stderr, "usb_claim_interface: %d -> %d (%s)\n",
usbdevice->config[0].interface[usi->dwInterfaceNum].altsetting[usi->dwAlternateSetting].bInterfaceNumber,
ret, usb_strerror());
} }
} }
#endif #endif
#ifdef DEBUG DPRINTF("unique: %lu, interfacenum: %lu, alternatesetting: %lu, options: %lx\n",
fprintf(stderr,"unique: %lu, interfacenum: %lu, alternatesetting: %lu, options: %lx\n", usi->dwUniqueID, usi->dwInterfaceNum, usi->dwAlternateSetting, usi->dwOptions); usi->dwUniqueID, usi->dwInterfaceNum,
#endif usi->dwAlternateSetting, usi->dwOptions);
} }
break; break;
case USB_GET_DEVICE_DATA: case USB_GET_DEVICE_DATA:
#ifdef DEBUG DPRINTF("USB_GET_DEVICE_DATA\n");
fprintf(stderr,"faking USB_GET_DEVICE_DATA\n");
#endif
{ {
struct usb_get_device_data *ugdd = (struct usb_get_device_data*)(wdheader->data); struct usb_get_device_data *ugdd = (struct usb_get_device_data*)(wdheader->data);
int pSize; int pSize;
#ifdef DEBUG DPRINTF("unique: %lu, bytes: %lu, options: %lx\n",
fprintf(stderr, "unique: %lu, bytes: %lu, options: %lx\n", ugdd->dwUniqueID, ugdd->dwBytes, ugdd->dwOptions); ugdd->dwUniqueID, ugdd->dwBytes,
#endif ugdd->dwOptions);
pSize = ugdd->dwBytes; pSize = ugdd->dwBytes;
if (!ugdd->dwBytes) { if (!ugdd->dwBytes) {
if (usbdevice) { if (usbdevice) {
@ -414,21 +420,31 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
break; break;
case EVENT_REGISTER: case EVENT_REGISTER:
#ifdef DEBUG DPRINTF("EVENT_REGISTER\n");
fprintf(stderr,"EVENT_REGISTER\n");
#endif
{ {
struct event *e = (struct event*)(wdheader->data); struct event *e = (struct event*)(wdheader->data);
struct usb_bus *bus; struct usb_bus *bus;
int i; int i;
#ifdef DEBUG DPRINTF("handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lu, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n",
fprintf(stderr,"handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lu, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n", e->handle, e->dwAction, e->dwStatus, e->dwEventId, e->dwCardType, e->hKernelPlugIn, e->dwOptions, e->u.Usb.deviceId.dwVendorId, e->u.Usb.deviceId.dwProductId, e->u.Usb.dwUniqueID, e->dwEventVer, e->dwNumMatchTables); e->handle, e->dwAction,
#endif e->dwStatus, e->dwEventId, e->dwCardType,
e->hKernelPlugIn, e->dwOptions,
e->u.Usb.deviceId.dwVendorId,
e->u.Usb.deviceId.dwProductId,
e->u.Usb.dwUniqueID, e->dwEventVer,
e->dwNumMatchTables);
for (i = 0; i < e->dwNumMatchTables; i++) { for (i = 0; i < e->dwNumMatchTables; i++) {
#ifdef DEBUG
fprintf(stderr,"match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n", e->matchTables[i].VendorId, e->matchTables[i].ProductId, e->matchTables[i].bDeviceClass, e->matchTables[i].bDeviceSubClass, e->matchTables[i].bInterfaceClass, e->matchTables[i].bInterfaceSubClass, e->matchTables[i].bInterfaceProtocol); DPRINTF("match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n",
#endif e->matchTables[i].VendorId,
e->matchTables[i].ProductId,
e->matchTables[i].bDeviceClass,
e->matchTables[i].bDeviceSubClass,
e->matchTables[i].bInterfaceClass,
e->matchTables[i].bInterfaceSubClass,
e->matchTables[i].bInterfaceProtocol);
for (bus = busses; bus; bus = bus->next) { for (bus = busses; bus; bus = bus->next) {
struct usb_device *dev; struct usb_device *dev;
@ -446,15 +462,16 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
int ai; int ai;
for (ai = 0; ai < interface->num_altsetting; ai++) { for (ai = 0; ai < interface->num_altsetting; ai++) {
#ifdef DEBUG
fprintf(stderr, "intclass: %x, intsubclass: %x, intproto: %x\n", interface->altsetting[i].bInterfaceClass, interface->altsetting[i].bInterfaceSubClass, interface->altsetting[i].bInterfaceProtocol); DPRINTF("intclass: %x, intsubclass: %x, intproto: %x\n",
#endif interface->altsetting[i].bInterfaceClass,
interface->altsetting[i].bInterfaceSubClass,
interface->altsetting[i].bInterfaceProtocol);
if ((interface->altsetting[ai].bInterfaceSubClass == e->matchTables[i].bInterfaceSubClass) && if ((interface->altsetting[ai].bInterfaceSubClass == e->matchTables[i].bInterfaceSubClass) &&
(interface->altsetting[ai].bInterfaceProtocol == e->matchTables[i].bInterfaceProtocol)){ (interface->altsetting[ai].bInterfaceProtocol == e->matchTables[i].bInterfaceProtocol)){
/* TODO: check interfaceClass! */ /* TODO: check interfaceClass! */
#ifdef DEBUG DPRINTF("found device with libusb\n");
fprintf(stderr,"!!!FOUND DEVICE WITH LIBUSB!!!\n");
#endif
usbdevice = dev; usbdevice = dev;
card_type = e->dwCardType; card_type = e->dwCardType;
} }
@ -472,39 +489,51 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
#endif #endif
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr,"handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lu, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n", e->handle, e->dwAction, e->dwStatus, e->dwEventId, e->dwCardType, e->hKernelPlugIn, e->dwOptions, e->u.Usb.deviceId.dwVendorId, e->u.Usb.deviceId.dwProductId, e->u.Usb.dwUniqueID, e->dwEventVer, e->dwNumMatchTables); DPRINTF("handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lu, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n",
e->handle, e->dwAction,
e->dwStatus, e->dwEventId, e->dwCardType,
e->hKernelPlugIn, e->dwOptions,
e->u.Usb.deviceId.dwVendorId,
e->u.Usb.deviceId.dwProductId,
e->u.Usb.dwUniqueID, e->dwEventVer,
e->dwNumMatchTables);
for (i = 0; i < e->dwNumMatchTables; i++) for (i = 0; i < e->dwNumMatchTables; i++)
fprintf(stderr,"match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n", e->matchTables[i].VendorId, e->matchTables[i].ProductId, e->matchTables[i].bDeviceClass, e->matchTables[i].bDeviceSubClass, e->matchTables[i].bInterfaceClass, e->matchTables[i].bInterfaceSubClass, e->matchTables[i].bInterfaceProtocol); DPRINTF("match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n",
e->matchTables[i].VendorId,
e->matchTables[i].ProductId,
e->matchTables[i].bDeviceClass,
e->matchTables[i].bDeviceSubClass,
e->matchTables[i].bInterfaceClass,
e->matchTables[i].bInterfaceSubClass,
e->matchTables[i].bInterfaceProtocol);
#endif #endif
} }
break; break;
case TRANSFER: case TRANSFER:
fprintf(stderr,"TRANSFER\n"); DPRINTF("TRANSFER\n");
#ifndef NO_WINDRVR #ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl); ret = (*ioctl_func) (fd, request, wdioctl);
#endif #endif
break; break;
case EVENT_UNREGISTER: case EVENT_UNREGISTER:
#ifdef DEBUG DPRINTF("EVENT_UNREGISTER\n");
fprintf(stderr,"EVENT_UNREGISTER\n");
#endif
#ifndef NO_WINDRVR #ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl); ret = (*ioctl_func) (fd, request, wdioctl);
#endif #endif
break; break;
case INT_WAIT: case INT_WAIT:
#ifdef DEBUG DPRINTF("INT_WAIT\n");
fprintf(stderr,"INT_WAIT\n");
#endif
{ {
struct interrupt *it = (struct interrupt*)(wdheader->data); struct interrupt *it = (struct interrupt*)(wdheader->data);
#ifdef DEBUG DPRINTF("Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",
fprintf(stderr,"Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n", it->hInterrupt, it->dwOptions, it->dwCmds, it->fEnableOk, it->dwCounter, it->dwLost, it->fStopped); it->hInterrupt, it->dwOptions,
#endif it->dwCmds, it->fEnableOk, it->dwCounter,
it->dwLost, it->fStopped);
#ifndef NO_WINDRVR #ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl); ret = (*ioctl_func) (fd, request, wdioctl);
@ -522,31 +551,44 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
} }
#endif #endif
#ifdef DEBUG DPRINTF("INT_WAIT_RETURN: Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n",
fprintf(stderr,"INT_WAIT_RETURN: Handle: %lu, Options: %lx, ncmds: %lu, enableok: %lu, count: %lu, lost: %lu, stopped: %lu\n", it->hInterrupt, it->dwOptions, it->dwCmds, it->fEnableOk, it->dwCounter, it->dwLost, it->fStopped); it->hInterrupt, it->dwOptions, it->dwCmds,
#endif it->fEnableOk, it->dwCounter, it->dwLost,
it->fStopped);
} }
break; break;
case CARD_UNREGISTER: case CARD_UNREGISTER:
fprintf(stderr,"CARD_UNREGISTER\n"); DPRINTF("CARD_UNREGISTER\n");
#ifndef NO_WINDRVR #ifndef NO_WINDRVR
ret = (*ioctl_func) (fd, request, wdioctl); ret = (*ioctl_func) (fd, request, wdioctl);
#endif #endif
break; break;
case EVENT_PULL: case EVENT_PULL:
#ifdef DEBUG DPRINTF("EVENT_PULL\n");
fprintf(stderr,"EVENT_PULL\n");
#endif
{ {
struct event *e = (struct event*)(wdheader->data); struct event *e = (struct event*)(wdheader->data);
#ifdef DEBUG #ifdef DEBUG
int i; int i;
fprintf(stderr,"handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lx, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n", e->handle, e->dwAction, e->dwStatus, e->dwEventId, e->dwCardType, e->hKernelPlugIn, e->dwOptions, e->u.Usb.deviceId.dwVendorId, e->u.Usb.deviceId.dwProductId, e->u.Usb.dwUniqueID, e->dwEventVer, e->dwNumMatchTables); DPRINTF("handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lx, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n",
e->handle, e->dwAction, e->dwStatus,
e->dwEventId, e->dwCardType, e->hKernelPlugIn,
e->dwOptions, e->u.Usb.deviceId.dwVendorId,
e->u.Usb.deviceId.dwProductId,
e->u.Usb.dwUniqueID, e->dwEventVer,
e->dwNumMatchTables);
for (i = 0; i < e->dwNumMatchTables; i++) for (i = 0; i < e->dwNumMatchTables; i++)
fprintf(stderr,"match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n", e->matchTables[i].VendorId, e->matchTables[i].ProductId, e->matchTables[i].bDeviceClass, e->matchTables[i].bDeviceSubClass, e->matchTables[i].bInterfaceClass, e->matchTables[i].bInterfaceSubClass, e->matchTables[i].bInterfaceProtocol); DPRINTF("match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n",
e->matchTables[i].VendorId,
e->matchTables[i].ProductId,
e->matchTables[i].bDeviceClass,
e->matchTables[i].bDeviceSubClass,
e->matchTables[i].bInterfaceClass,
e->matchTables[i].bInterfaceSubClass,
e->matchTables[i].bInterfaceProtocol);
#endif #endif
#ifndef NO_WINDRVR #ifndef NO_WINDRVR
@ -570,9 +612,23 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {
#endif #endif
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr,"handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lx, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n", e->handle, e->dwAction, e->dwStatus, e->dwEventId, e->dwCardType, e->hKernelPlugIn, e->dwOptions, e->u.Usb.deviceId.dwVendorId, e->u.Usb.deviceId.dwProductId, e->u.Usb.dwUniqueID, e->dwEventVer, e->dwNumMatchTables); DPRINTF("handle: %lu, action: %lu, status: %lu, eventid: %lu, cardtype: %lx, kplug: %lu, options: %lu, dev: %lx:%lx, unique: %lu, ver: %lu, nummatch: %lu\n",
e->handle, e->dwAction, e->dwStatus,
e->dwEventId, e->dwCardType, e->hKernelPlugIn,
e->dwOptions, e->u.Usb.deviceId.dwVendorId,
e->u.Usb.deviceId.dwProductId,
e->u.Usb.dwUniqueID, e->dwEventVer,
e->dwNumMatchTables);
for (i = 0; i < e->dwNumMatchTables; i++) for (i = 0; i < e->dwNumMatchTables; i++)
fprintf(stderr,"match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n", e->matchTables[i].VendorId, e->matchTables[i].ProductId, e->matchTables[i].bDeviceClass, e->matchTables[i].bDeviceSubClass, e->matchTables[i].bInterfaceClass, e->matchTables[i].bInterfaceSubClass, e->matchTables[i].bInterfaceProtocol); DPRINTF("match: dev: %04x:%04x, class: %x, subclass: %x, intclass: %x, intsubclass: %x, intproto: %x\n",
e->matchTables[i].VendorId,
e->matchTables[i].ProductId,
e->matchTables[i].bDeviceClass,
e->matchTables[i].bDeviceSubClass,
e->matchTables[i].bInterfaceClass,
e->matchTables[i].bInterfaceSubClass,
e->matchTables[i].bInterfaceProtocol);
#endif #endif
} }
@ -595,7 +651,7 @@ int ioctl(int fd, int request, ...) {
int ret; int ret;
if (!ioctl_func) if (!ioctl_func)
ioctl_func = (int (*) (int, int, void *)) dlsym (REAL_LIBC, "ioctl"); ioctl_func = (int (*) (int, int, void *)) dlsym (RTLD_NEXT, "ioctl");
va_start (args, request); va_start (args, request);
argp = va_arg (args, void *); argp = va_arg (args, void *);
@ -616,7 +672,7 @@ int open (const char *pathname, int flags, ...) {
int fd; int fd;
if (!func) if (!func)
func = (int (*) (const char *, int, mode_t)) dlsym (REAL_LIBC, "open"); func = (int (*) (const char *, int, mode_t)) dlsym (RTLD_NEXT, "open");
if (flags & O_CREAT) { if (flags & O_CREAT) {
va_start(args, flags); va_start(args, flags);
@ -625,9 +681,7 @@ int open (const char *pathname, int flags, ...) {
} }
if (!strcmp (pathname, "/dev/windrvr6")) { if (!strcmp (pathname, "/dev/windrvr6")) {
#ifdef DEBUG DPRINTF("opening windrvr6\n");
fprintf(stderr,"opening windrvr6\n");
#endif
#ifdef NO_WINDRVR #ifdef NO_WINDRVR
windrvrfd = fd = (*func) ("/dev/null", flags, mode); windrvrfd = fd = (*func) ("/dev/null", flags, mode);
#else #else
@ -651,12 +705,10 @@ int close(int fd) {
static int (*func) (int) = NULL; static int (*func) (int) = NULL;
if (!func) if (!func)
func = (int (*) (int)) dlsym(REAL_LIBC, "close"); func = (int (*) (int)) dlsym(RTLD_NEXT, "close");
if (fd == windrvrfd) { if (fd == windrvrfd) {
#ifdef DEBUG DPRINTF("close windrvrfd\n");
fprintf(stderr,"close windrvrfd\n");
#endif
windrvrfd = 0; windrvrfd = 0;
} }
@ -668,14 +720,12 @@ FILE *fopen(const char *path, const char *mode) {
static FILE* (*func) (const char*, const char*) = NULL; static FILE* (*func) (const char*, const char*) = NULL;
if (!func) if (!func)
func = (FILE* (*) (const char*, const char*)) dlsym(REAL_LIBC, "fopen"); func = (FILE* (*) (const char*, const char*)) dlsym(RTLD_NEXT, "fopen");
ret = (*func) (path, mode); ret = (*func) (path, mode);
if (!strcmp (path, "/proc/modules")) { if (!strcmp (path, "/proc/modules")) {
#ifdef DEBUG DPRINTF("opening /proc/modules\n");
fprintf(stderr,"opening /proc/modules\n");
#endif
#ifdef NO_WINDRVR #ifdef NO_WINDRVR
modulesfp = ret; modulesfp = ret;
modules_read = 0; modules_read = 0;
@ -692,7 +742,7 @@ char *fgets(char *s, int size, FILE *stream) {
if (!func) if (!func)
func = (char* (*) (char*, int, FILE*)) dlsym(REAL_LIBC, "fgets"); func = (char* (*) (char*, int, FILE*)) dlsym(RTLD_NEXT, "fgets");
if (modulesfp == stream) { if (modulesfp == stream) {
if (modules_read < sizeof(modules)) { if (modules_read < sizeof(modules)) {
@ -711,7 +761,7 @@ int fclose(FILE *fp) {
static int (*func) (FILE*) = NULL; static int (*func) (FILE*) = NULL;
if (!func) if (!func)
func = (int (*) (FILE*)) dlsym(REAL_LIBC, "fclose"); func = (int (*) (FILE*)) dlsym(RTLD_NEXT, "fclose");
if (fp == modulesfp) { if (fp == modulesfp) {
modulesfp = NULL; modulesfp = NULL;
@ -724,7 +774,7 @@ int access(const char *pathname, int mode) {
static int (*func) (const char*, int); static int (*func) (const char*, int);
if (!func) if (!func)
func = (int (*) (const char*, int)) dlsym(REAL_LIBC, "access"); func = (int (*) (const char*, int)) dlsym(RTLD_NEXT, "access");
if (!strcmp(pathname, "/dev/windrvr6")) { if (!strcmp(pathname, "/dev/windrvr6")) {
return 0; return 0;
@ -732,4 +782,3 @@ int access(const char *pathname, int mode) {
return (*func)(pathname, mode); return (*func)(pathname, mode);
} }
} }
#endif