X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=ioctl.c;h=814caf0c1eb0d28b23c97355177e1bbf17ffae1c;hb=ee36ce19e03e08f4b692570090ee58b72d2f0f50;hp=2af2743e125aaa784962779cf1d3578f676d05ce;hpb=c6c1ea5440ca78e9fab99d7f3e18a54ba4d7b7f0;p=strace diff --git a/ioctl.c b/ioctl.c index 2af2743e..814caf0c 100644 --- a/ioctl.c +++ b/ioctl.c @@ -32,7 +32,7 @@ #include "defs.h" -struct ioctlent ioctlent0[] = { +const struct ioctlent ioctlent0[] = { /* * `ioctlent.h' may be generated from `ioctlent.raw' by the auxiliary * program `ioctlsort', such that the list is sorted by the `code' field. @@ -47,25 +47,25 @@ struct ioctlent ioctlent0[] = { #include #endif -int nioctlents0 = sizeof ioctlent0 / sizeof ioctlent0[0]; +const int nioctlents0 = sizeof ioctlent0 / sizeof ioctlent0[0]; #if SUPPORTED_PERSONALITIES >= 2 -struct ioctlent ioctlent1[] = { +const struct ioctlent ioctlent1[] = { #include "ioctlent1.h" }; -int nioctlents1 = sizeof ioctlent1 / sizeof ioctlent1[0]; +const int nioctlents1 = sizeof ioctlent1 / sizeof ioctlent1[0]; #endif /* SUPPORTED_PERSONALITIES >= 2 */ #if SUPPORTED_PERSONALITIES >= 3 -struct ioctlent ioctlent2[] = { +const struct ioctlent ioctlent2[] = { #include "ioctlent2.h" }; -int nioctlents1 = sizeof ioctlent2 / sizeof ioctlent2[0]; +int nioctlents2 = sizeof ioctlent2 / sizeof ioctlent2[0]; #endif /* SUPPORTED_PERSONALITIES >= 3 */ -struct ioctlent *ioctlent; +const struct ioctlent *ioctlent; int nioctlents; static int @@ -78,7 +78,7 @@ const void *b; return (code1 > code2) ? 1 : (code1 < code2) ? -1 : 0; } -char * +const struct ioctlent * ioctl_lookup(code) long code; { @@ -90,7 +90,24 @@ long code; #endif iop = (struct ioctlent *) bsearch((char *) &ioent, (char *) ioctlent, nioctlents, sizeof(struct ioctlent), compare); - return iop ? iop->symbol : NULL; + while (iop > ioctlent) + if ((--iop)->code != ioent.code) { + iop++; + break; + } + return iop; +} + +const struct ioctlent * +ioctl_next_match(iop) +const struct ioctlent *iop; +{ + long code; + + code = (iop++)->code; + if (iop < ioctlent + nioctlents && iop->code == code) + return iop; + return NULL; } int @@ -100,7 +117,7 @@ long code, arg; { switch ((code >> 8) & 0xff) { #ifdef LINUX -#ifdef ALPHA +#if defined(ALPHA) || defined(POWERPC) case 'f': case 't': case 'T': #else /* !ALPHA */ case 0x54: @@ -113,9 +130,9 @@ long code, arg; case 0x89: #else /* !LINUX */ case 'r': case 's': case 'i': -#ifndef FREEBSD +#ifndef FREEBSD case 'p': -#endif +#endif #endif /* !LINUX */ return sock_ioctl(tcp, code, arg); #ifdef USE_PROCFS @@ -124,7 +141,7 @@ long code, arg; case 'q': #else case 'p': -#endif +#endif return proc_ioctl(tcp, code, arg); #endif #endif /* USE_PROCFS */ @@ -185,4 +202,3 @@ long code, arg; * * End of Registry */ -