X-Git-Url: http://git.osdn.net/view?p=android-x86%2Fexternal-wireless-tools.git;a=blobdiff_plain;f=wireless_tools%2Fiwpriv.c;h=2db4afd2106cd8ca849ec1cb34934562d9fcd498;hp=d1da985489456ec24e6b8178886b6dad35c9fcab;hb=358fbc0574da2a7a460cfec4628e470e7affc236;hpb=bcc23ab3dacbe0d30b7b5e8adb7badbe2e254a7d diff --git a/wireless_tools/iwpriv.c b/wireless_tools/iwpriv.c index d1da985..2db4afd 100644 --- a/wireless_tools/iwpriv.c +++ b/wireless_tools/iwpriv.c @@ -1,14 +1,17 @@ /* * Wireless Tools * - * Jean II - HPLB '99 + * Jean II - HPLB 97->99 - HPL 99->00 * * Main code for "iwconfig". This is the generic tool for most * manipulations... - * You need to link this code against "iwcommon.c" and "-lm". + * You need to link this code against "iwlib.c" and "-lm". + * + * This file is released under the GPL license. + * Copyright (c) 1997-2002 Jean Tourrilhes */ -#include "iwcommon.h" /* Header */ +#include "iwlib.h" /* Header */ /************************* MISC SUBROUTINES **************************/ @@ -22,7 +25,6 @@ iw_usage(void) fprintf(stderr, "Usage: iwpriv interface [private-command [private-arguments]]\n"); fprintf(stderr, " interface [roam {on|off}]\n"); fprintf(stderr, " interface [port {ad-hoc|managed|N}]\n"); - exit(1); } /************************ GENERIC FUNCTIONS *************************/ @@ -37,12 +39,12 @@ print_priv_info(int skfd, char * ifname) { int k; - iwprivargs priv[16]; + iwprivargs priv[32]; int n; - char * argtype[] = { " ", "byte", "char", "", "int", "float" }; + char * argtype[] = { " ", "byte", "char", "", "int ", "float" }; /* Read the private ioctls */ - n = get_priv_info(skfd, ifname, priv); + n = iw_get_priv_info(skfd, ifname, priv); /* Is there any ? */ if(n <= 0) @@ -111,9 +113,10 @@ set_private(int skfd, /* Socket */ int k; iwprivargs priv[16]; int number; + int temp; /* Read the private ioctls */ - number = get_priv_info(skfd, ifname, priv); + number = iw_get_priv_info(skfd, ifname, priv); /* Is there any ? */ if(number <= 0) @@ -151,8 +154,10 @@ set_private(int skfd, /* Socket */ wrq.u.data.length = priv[k].set_args & IW_PRIV_SIZE_MASK; /* Fetch args */ - for(; i < wrq.u.data.length + 1; i++) - sscanf(args[i], "%d", (int *)(buffer + i - 1)); + for(; i < wrq.u.data.length + 1; i++) { + sscanf(args[i], "%d", &temp); + buffer[i - 1] = (char) temp; + } break; case IW_PRIV_TYPE_INT: @@ -207,7 +212,7 @@ set_private(int skfd, /* Socket */ strncpy(wrq.ifr_name, ifname, IFNAMSIZ); if((priv[k].set_args & IW_PRIV_SIZE_FIXED) && - (byte_size(priv[k].set_args) < IFNAMSIZ)) + (iw_byte_size(priv[k].set_args) < IFNAMSIZ)) memcpy(wrq.u.name, buffer, IFNAMSIZ); else { @@ -233,7 +238,7 @@ set_private(int skfd, /* Socket */ printf("%-8.8s %s:", ifname, priv[k].name); if((priv[k].get_args & IW_PRIV_SIZE_FIXED) && - (byte_size(priv[k].get_args) < IFNAMSIZ)) + (iw_byte_size(priv[k].get_args) < IFNAMSIZ)) { memcpy(buffer, wrq.u.name, IFNAMSIZ); n = priv[k].get_args & IW_PRIV_SIZE_MASK; @@ -253,7 +258,7 @@ set_private(int skfd, /* Socket */ case IW_PRIV_TYPE_INT: /* Display args */ for(j = 0; j < n; j++) - printf("%d ", ((u_int *) buffer)[i]); + printf("%d ", ((u_int *) buffer)[j]); printf("\n"); break; @@ -299,7 +304,7 @@ set_roaming(int skfd, /* Socket */ change roam states */ /* Read the private ioctls */ - number = get_priv_info(skfd, ifname, priv); + number = iw_get_priv_info(skfd, ifname, priv); /* Is there any ? */ if(number <= 0) @@ -311,7 +316,10 @@ set_roaming(int skfd, /* Socket */ } if(count != 1) - iw_usage(); + { + iw_usage(); + return(-1); + } if(!strcasecmp(args[i], "on")) { @@ -361,12 +369,11 @@ set_roaming(int skfd, /* Socket */ if(ioctl(skfd, priv[k].cmd, &wrq) < 0) { fprintf(stderr, "Roaming support is broken.\n"); - exit(0); + return(-1); } } - i++; - return(i); + return(0); } /*------------------------------------------------------------------*/ @@ -389,7 +396,7 @@ port_type(int skfd, /* Socket */ char * modes[] = { "invalid", "managed (BSS)", "reserved", "ad-hoc" }; /* Read the private ioctls */ - number = get_priv_info(skfd, ifname, priv); + number = iw_get_priv_info(skfd, ifname, priv); /* Is there any ? */ if(number <= 0) @@ -429,7 +436,10 @@ port_type(int skfd, /* Socket */ } if(count != 1) - iw_usage(); + { + iw_usage(); + return(-1); + } /* Read it */ /* As a string... */ @@ -441,7 +451,10 @@ port_type(int skfd, /* Socket */ else /* ...or as an integer */ if(sscanf(args[i], "%d", (int *) &ptype) != 1) - iw_usage(); + { + iw_usage(); + return(-1); + } k = -1; while((++k < number) && strcmp(priv[k].name, "sport_type") && @@ -458,11 +471,10 @@ port_type(int skfd, /* Socket */ if(ioctl(skfd, priv[k].cmd, &wrq) < 0) { fprintf(stderr, "Invalid port type (or setting not allowed)\n"); - exit(0); + return(-1); } - i++; - return(i); + return(0); } /******************************* MAIN ********************************/ @@ -479,10 +491,10 @@ main(int argc, int goterr = 0; /* Create a channel to the NET kernel. */ - if((skfd = sockets_open()) < 0) + if((skfd = iw_sockets_open()) < 0) { perror("socket"); - exit(-1); + return(-1); } /* No argument : show the list of all device + info */ @@ -490,7 +502,7 @@ main(int argc, { print_priv_devices(skfd); close(skfd); - exit(0); + return(0); } /* Special cases take one... */ @@ -500,7 +512,7 @@ main(int argc, { iw_usage(); close(skfd); - exit(0); + return(0); } /* The device name must be the first argument */ @@ -509,7 +521,7 @@ main(int argc, { print_priv_info(skfd, argv[1]); close(skfd); - exit(0); + return(0); } /* Special cases take two... */ @@ -518,7 +530,7 @@ main(int argc, { goterr = set_roaming(skfd, argv + 3, argc - 3, argv[1]); close(skfd); - exit(0); + return(goterr); } /* Port type */ @@ -526,7 +538,7 @@ main(int argc, { goterr = port_type(skfd, argv + 3, argc - 3, argv[1]); close(skfd); - exit(0); + return(goterr); } /* Otherwise, it's a private ioctl */ @@ -535,5 +547,5 @@ main(int argc, /* Close the socket. */ close(skfd); - return(1); + return(goterr); }