📄 iwredir.c
字号:
/* * Wireless Tools * * Jean II - HPL 03 * * Main code for "iwredir". This is a hack to match multiple version * of the tools with multiple kernels on the same system... * * This file is released under the GPL license. * Copyright (c) 2003 Jean Tourrilhes <jt@hpl.hp.com> *//***************************** INCLUDES *****************************/#include "iwlib.h" /* Header *//*********************** VERSION SUBROUTINES ***********************//*------------------------------------------------------------------*//* * Extract WE version number from /proc/net/wireless * If we have WE-16 and later, the WE version is available at the * end of the header line of the file. * For version prior to that, we can only detect the change from * v11 to v12, so we do an approximate job. Fortunately, v12 to v15 * are highly binary compatible (on the struct level). */static intiw_get_kernel_we_version(void){ char buff[1024]; FILE * fh; char * p; int v; /* Check if /proc/net/wireless is available */ fh = fopen(PROC_NET_WIRELESS, "r"); if(fh == NULL) { fprintf(stderr, "Cannot read " PROC_NET_WIRELESS "\n"); return(-1); } /* Read the first line of buffer */ fgets(buff, sizeof(buff), fh); if(strstr(buff, "| WE") == NULL) { /* Prior to WE16, so explicit version not present */ /* Black magic */ if(strstr(buff, "| Missed") == NULL) v = 11; else v = 15; fclose(fh); return(v); } /* Read the second line of buffer */ fgets(buff, sizeof(buff), fh); /* Get to the last separator, to get the version */ p = strrchr(buff, '|'); if((p == NULL) || (sscanf(p + 1, "%d", &v) != 1)) { fprintf(stderr, "Cannot parse " PROC_NET_WIRELESS "\n"); fclose(fh); return(-1); } fclose(fh); return(v);}/******************************* MAIN ********************************//*------------------------------------------------------------------*//* * The main ! */intmain(int argc, char ** argv){ int version = 0; int goterr = 0; char file[512]; int flen; /* Get current version */ version = iw_get_kernel_we_version(); if(version <= 0) version = 15; /* We can only read only WE16 and higher */ /* Special case for Wireless Extension Version... */ /* This is mostly used in the Makefile, we use an "unlikely" option * to maximise transparency to the tool we masquerade - Jean II */ if((argc > 1) && !strcmp(argv[1], "-wev")) { printf("%d\n", version); return(version); } /* Mangle the command name */ flen = strlen(argv[0]); if((flen + 3) >= 512) { fprintf(stderr, "Command name too long [%s]\n", argv[0]); return(-1); } memcpy(file, argv[0], flen + 1); sprintf(file + flen, "%d", version); /* Execute (won't return) */ goterr = execvp(file, argv); /* In case of error */ fprintf(stderr, "Can't execute command %s: %s\n", file, strerror(errno)); return(goterr);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -