diff options
author | Jean-Baptiste Queru <jbq@google.com> | 2009-11-12 18:46:24 -0800 |
---|---|---|
committer | Jean-Baptiste Queru <jbq@google.com> | 2009-11-12 18:46:24 -0800 |
commit | 9b213f53c0858384d639ce002fec21f3f82a2ca1 (patch) | |
tree | eb956c834511fabb52ce97c73837b8ffe8934c11 /wilink_6_1/platforms/os/linux/src/osRgstry_parser.c | |
parent | 2c2f52e482a7e2577ec586d7d00a27cf08619420 (diff) | |
download | ti-9b213f53c0858384d639ce002fec21f3f82a2ca1.tar.gz |
eclair snapshot
Diffstat (limited to 'wilink_6_1/platforms/os/linux/src/osRgstry_parser.c')
-rw-r--r-- | wilink_6_1/platforms/os/linux/src/osRgstry_parser.c | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/wilink_6_1/platforms/os/linux/src/osRgstry_parser.c b/wilink_6_1/platforms/os/linux/src/osRgstry_parser.c new file mode 100644 index 0000000..8aa108b --- /dev/null +++ b/wilink_6_1/platforms/os/linux/src/osRgstry_parser.c @@ -0,0 +1,222 @@ +/* + * osRgstry_parser.c + * + * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name Texas Instruments nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +/* + * src/osRgstry_parser.c + * + */ + +#include "osRgstry_parser.h" + +extern void regReadLastDbgState(TWlanDrvIfObjPtr pAdapter); + +static char *init_file = NULL; +static int init_file_length = 0; +static PNDIS_CONFIGURATION_PARAMETER pNdisParm; + +int osInitTable_IniFile (TI_HANDLE hOs, TInitTable *InitTable, char *file_buf, int file_length) +{ + TWlanDrvIfObjPtr drv = (TWlanDrvIfObjPtr)hOs; + static NDIS_CONFIGURATION_PARAMETER vNdisParm; + + init_file = file_buf; + init_file_length = file_length; + pNdisParm = &vNdisParm; + + regFillInitTable (drv, InitTable); +#ifdef TI_DBG + regReadLastDbgState(drv); +#endif + return 0; +} + +unsigned long TiDebugFlag; + +/* void PRINT( char * type, char *format, ... )*/ +/* {*/ +/* return ;*/ +/* }*/ + +NDIS_STATUS NdisUnicodeStringToAnsiString( IN OUT PANSI_STRING DestinationString, + IN PUNICODE_STRING SourceString ) +{ + if( DestinationString->MaximumLength < SourceString->Length ) + return NDIS_STATUS_BUFFER_TOO_SHORT; + + DestinationString->Length = SourceString->Length; + os_memoryCopy( NULL, DestinationString->Buffer, SourceString->Buffer, SourceString->Length ); + return NDIS_STATUS_SUCCESS; + +} + +#ifndef tolower +#define tolower(c) ( (c) | 0x20) +#endif + + /* Search sub-string in memory buffer */ + /* From '#' to EOL ---- remarks */ +char *mem_str(char *buf, char *str, char *end_buf) +{ + int i; + + for( ; buf <= end_buf; buf++ ) + { + if( *buf == '#' ) + { + buf = strchr(buf+1, '\n' ); + if( !buf ) + return NULL; + + } + for( i=0; &buf[i] <= end_buf && buf[i] && str[i] && (tolower(buf[i]) == tolower(str[i])); i++ ) ; + + if ((!str[i]) && (!((tolower(*(buf-1))>='a') && (tolower(*(buf-1))<='z')))) + return buf; + } + return NULL; +} + +char * ltrim(char *s ) +{ + while( *s == ' ' || *s == '\t' ) s++; + return s; +} + +void NdisReadConfiguration( OUT PNDIS_STATUS status, OUT PNDIS_CONFIGURATION_PARAMETER *param_value, + IN NDIS_HANDLE config_handle, IN PNDIS_STRING keyword, IN NDIS_PARAMETER_TYPE param_type ) +{ + char *name = keyword->Buffer; + char *s, *buf = init_file, *end_buf = init_file + init_file_length; + static int count = 0; + + *status = NDIS_STATUS_FAILURE; + *param_value = pNdisParm; + + if( !count ) + { + print_deb("\n++++++++++++\n%s+++++++++++\n", init_file); + count++; + } + + if( !name || !*name || !init_file || !init_file_length ) + return ; + + memset(pNdisParm, 0, sizeof(NDIS_CONFIGURATION_PARAMETER)); + + while(buf < end_buf) + { + buf = ltrim(buf); + if( !(s = mem_str(buf, name, end_buf)) ) + break; + + buf = ltrim(s + strlen(name)); + if( *buf == '=' ) + buf++; + else { + /*print_err("\n...init_config err: delim not found (=): ** %s **\n", buf );*/ + buf = s + 1; /*strlen(name);*/ + continue; + } + buf = ltrim(buf); + if( param_type == NdisParameterString ) + { + char *remark = NULL; + + s = strchr(buf, '\n'); + if( !s ) + s = buf+strlen(buf); + + remark = memchr(buf, '#', s - buf); /* skip remarks */ + if( remark ) + { + do { /* remove whitespace */ + remark--; + } while( *remark == ' ' || *remark == '\t' ); + + pNdisParm->ParameterData.StringData.Length = remark - buf + 1; + } + else + pNdisParm->ParameterData.StringData.Length = s - buf; + + pNdisParm->ParameterData.StringData.Buffer = (TI_UINT8*)&pNdisParm->StringBuffer[0]; + pNdisParm->ParameterData.StringData.MaximumLength = NDIS_MAX_STRING_LEN; + if( !pNdisParm->ParameterData.StringData.Length > NDIS_MAX_STRING_LEN ) + { + *status = NDIS_STATUS_BUFFER_TOO_SHORT; + return; + } + memcpy(pNdisParm->ParameterData.StringData.Buffer, buf, pNdisParm->ParameterData.StringData.Length); + print_info("NdisReadConfiguration(): %s = (%d)'%s'\n", name, pNdisParm->ParameterData.StringData.Length, pNdisParm->ParameterData.StringData.Buffer); + } + else if( param_type == NdisParameterInteger ) + { + char *end_p; + pNdisParm->ParameterData.IntegerData = simple_strtol(buf, &end_p, 0); + if (end_p && *end_p && *end_p!=' ' && *end_p!='\n' + && *end_p!='\r' && *end_p!='\t') + { + print_err("\n...init_config: invalid int value for <%s> : %s\n", name, buf ); + return; + } + /*print_deb(" NdisReadConfiguration(): buf = %p (%.20s)\n", buf, buf );*/ + print_info("NdisReadConfiguration(): %s = %d\n", name, (TI_INT32) pNdisParm->ParameterData.IntegerData); + } + else + { + print_err("NdisReadConfiguration(): unknow parameter type %d for %s\n", param_type, name ); + return; + } + *status = NDIS_STATUS_SUCCESS; + return; + + } + return ; +} + +void NdisWriteConfiguration( OUT PNDIS_STATUS Status, + IN NDIS_HANDLE ConfigurationHandle, + IN PNDIS_STRING Keyword, + IN PNDIS_CONFIGURATION_PARAMETER ParameterValue ) +{ + print_err(" NdisWriteConfiguration(): ** not implemented yet ...\n"); +} + +void NdisMIndicateStatus( + NDIS_HANDLE MiniportAdapterHandle, + NDIS_STATUS GeneralStatus, + void* StatusBuffer, + TI_UINT32 StatusBufferSize +) +{ +} |