X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1a6944fd74cfb70ace96d60bde31a7c8e0a5896d..00c813596e3eefdd028365acf9542355937e5531:/src/iodbc/misc.c diff --git a/src/iodbc/misc.c b/src/iodbc/misc.c index 76becac1b9..a31cee6cc6 100644 --- a/src/iodbc/misc.c +++ b/src/iodbc/misc.c @@ -1,103 +1,117 @@ -/** miscellaneous functions - - Copyright (C) 1995 by Ke Jin - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. -**/ +/* + * misc.c + * + * $Id$ + * + * Miscellaneous functions + * + * The iODBC driver manager. + * + * Copyright (C) 1995 by Ke Jin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ -#include <../iodbc/iodbc.h> +#include "config.h" -#include <../iodbc/isql.h> -#include <../iodbc/isqlext.h> +#include "isql.h" +#include "isqlext.h" #include +#include -static int -upper_strneq( - char* s1, - char* s2, - int n ) +static int +upper_strneq ( + char *s1, + char *s2, + int n) { - int i; - char c1, c2; + int i; + char c1, c2; - for(i=1;i= 'a' && c1 <= 'z' ) - { - c1 += ('A' - 'a'); - } - else if( c1 == '\n' ) - { - c1 = '\0'; - } + if (c1 >= 'a' && c1 <= 'z') + { + c1 += ('A' - 'a'); + } + else if (c1 == '\n') + { + c1 = '\0'; + } - if( c2 >= 'a' && c2 <= 'z' ) - { - c2 += ('A' - 'a'); - } - else if( c2 == '\n' ) - { - c2 = '\0'; - } + if (c2 >= 'a' && c2 <= 'z') + { + c2 += ('A' - 'a'); + } + else if (c2 == '\n') + { + c2 = '\0'; + } - if( (c1 - c2) || !c1 || !c2 ) - { - break; - } + if ((c1 - c2) || !c1 || !c2) + { + break; } + } - return (int)!(c1 - c2); + return (int) !(c1 - c2); } -static char* /* return new position in input str */ -readtoken( - char* istr, /* old position in input buf */ - char* obuf ) /* token string ( if "\0", then finished ) */ +static char * /* return new position in input str */ +readtoken ( + char *istr, /* old position in input buf */ + char *obuf) /* token string ( if "\0", then finished ) */ { - for(; *istr && *istr != '\n' ; istr ++ ) - { - char c, nx; + char *start = obuf; - c = *(istr); - - if( c == ' ' || c == '\t' ) - { - continue; - } + /* Skip leading white space */ + while (*istr == ' ' || *istr == '\t') + istr++; - nx = *(istr + 1); + for (; *istr && *istr != '\n'; istr++) + { + char c, nx; - *obuf = c; - obuf ++; + c = *(istr); + nx = *(istr + 1); - if( c == ';' || c == '=' ) - { - istr ++; - break; - } + if (c == ';') + { + for (; *istr && *istr != '\n'; istr++); + break; + } + *obuf = c; + obuf++; - if( nx == ' ' || nx == '\t' || nx == ';' || nx == '=' ) - { - istr ++; - break; - } + if (nx == ';' || nx == '=' || c == '=') + { + istr++; + break; } + } + *obuf = '\0'; - *obuf = '\0'; + /* Trim end of token */ + for (; obuf > start && (*(obuf - 1) == ' ' || *(obuf - 1) == '\t');) + *--obuf = '\0'; - return istr; + return istr; } #if !defined(WINDOWS) && !defined(WIN32) && !defined(OS2) @@ -105,275 +119,295 @@ readtoken( # define UNIX_PWD #endif -static char* -getinitfile(char* buf, int size) +char * +_iodbcdm_getinifile (char *buf, int size) { - int i, j; - char* ptr; + int i, j; + char *ptr; - j = STRLEN("/odbc.ini") + 1; + j = STRLEN ("/odbc.ini") + 1; - if( size < j ) - { - return NULL; - } + if (size < j) + { + return NULL; + } #if !defined(UNIX_PWD) - - i = GetWindowsDirectory((LPSTR)buf, size ); - if( i == 0 || i > size - j ) - { - return NULL; - } + i = GetWindowsDirectory ((LPSTR) buf, size); - sprintf( buf + i, "/odbc.ini"); + if (i == 0 || i > size - j) + { + return NULL; + } - return buf; -#else - ptr = (char*)getpwuid(getuid()); + sprintf (buf + i, "/odbc.ini"); - if( ptr == NULL ) + return buf; +#else + if ((ptr = getenv ("ODBCINI")) != NULL) + { + strcpy (buf, ptr); + return buf; + } + + if ((ptr = getenv ("IODBCINI")) != NULL) + { + strcpy (buf, ptr); + return buf; + } + + if ((ptr = getenv ("HOME")) == NULL) + { + ptr = (char *) getpwuid (getuid ()); + + if (ptr == NULL) { - return NULL; + return NULL; } - ptr = ((struct passwd*)ptr)->pw_dir; + ptr = ((struct passwd *) ptr)->pw_dir; + } - if( ptr == NULL || *ptr == '\0' ) - { - ptr = "/home"; - } + if (ptr == NULL || *ptr == '\0') + { + ptr = "/home"; + } - if( size < STRLEN(ptr) + j ) - { - return NULL; - } + if (size < STRLEN (ptr) + j) + { + return NULL; + } - sprintf( buf, "%s%s", ptr, "/.odbc.ini"); - /* i.e. searching ~/.odbc.ini */ + sprintf (buf, "%s%s", ptr, "/.odbc.ini"); + /* i.e. searching ~/.odbc.ini */ #endif - return buf; + return buf; } -char* _iodbcdm_getkeyvalbydsn( - char* dsn, - int dsnlen, - char* keywd, - char* value, - int size ) -/* read odbc init file to resolve the value of specified - * key from named or defaulted dsn section + +/* + * read odbc init file to resolve the value of specified + * key from named or defaulted dsn section */ +char * +_iodbcdm_getkeyvalbydsn ( + char *dsn, + int dsnlen, + char *keywd, + char *value, + int size) { - char buf[1024]; - char dsntk[SQL_MAX_DSN_LENGTH + 3] = { '[', '\0' }; - char token[1024]; /* large enough */ - FILE* file; - char pathbuf[1024]; - char* path; - -#define DSN_NOMATCH 0 + char buf[1024]; + char dsntk[SQL_MAX_DSN_LENGTH + 3] = {'[', '\0'}; + char token[1024]; /* large enough */ + FILE *file; + char pathbuf[1024]; + char *path; + +#define DSN_NOMATCH 0 #define DSN_NAMED 1 #define DSN_DEFAULT 2 - int dsnid = DSN_NOMATCH; - int defaultdsn = DSN_NOMATCH; + int dsnid = DSN_NOMATCH; + int defaultdsn = DSN_NOMATCH; - if( dsn == NULL || *dsn == 0 ) - { - dsn = "default"; - dsnlen = STRLEN(dsn); - } + if (dsn == NULL || *dsn == 0) + { + dsn = "default"; + dsnlen = STRLEN (dsn); + } - if( dsnlen == SQL_NTS ) - { - dsnlen = STRLEN(dsn); - } + if (dsnlen == SQL_NTS) + { + dsnlen = STRLEN (dsn); + } - if( dsnlen <= 0 || keywd == NULL || buf == 0 || size <= 0 ) - { - return NULL; - } + if (dsnlen <= 0 || keywd == NULL || buf == 0 || size <= 0) + { + return NULL; + } - if( dsnlen > sizeof(dsntk) - 2 ) - { - return NULL; - } + if (dsnlen > sizeof (dsntk) - 2) + { + return NULL; + } - value[0] = '\0'; + value[0] = '\0'; - STRNCAT( dsntk, dsn, dsnlen ); - STRCAT( dsntk, "]" ); + STRNCAT (dsntk, dsn, dsnlen); + STRCAT (dsntk, "]"); - dsnlen = dsnlen + 2; + dsnlen = dsnlen + 2; - path = getinitfile(pathbuf, sizeof(pathbuf)); + path = _iodbcdm_getinifile (pathbuf, sizeof (pathbuf)); - if( path == NULL ) - { - return NULL; - } + if (path == NULL) + { + return NULL; + } - file = (FILE*)fopen(path, "r"); + file = (FILE *) fopen (path, "r"); - if( file == NULL ) - { - return NULL; - } + if (file == NULL) + { + return NULL; + } - for(;;) - { - char* str; + for (;;) + { + char *str; - str = fgets(buf, sizeof(buf), file); + str = fgets (buf, sizeof (buf), file); - if( str == NULL ) - { - break; - } + if (str == NULL) + { + break; + } - if( *str == '[' ) + if (*str == '[') + { + if (upper_strneq (str, "[default]", STRLEN ("[default]"))) + { + /* we only read first dsn default dsn + * section (as well as named dsn). + */ + if (defaultdsn == DSN_NOMATCH) { - if( upper_strneq(str, "[default]", STRLEN("[default]")) ) - { - /* we only read first dsn default dsn - * section (as well as named dsn). - */ - if( defaultdsn == DSN_NOMATCH ) - { - dsnid = DSN_DEFAULT; - defaultdsn = DSN_DEFAULT; - } - else - { - dsnid = DSN_NOMATCH; - } - - continue; - } - else if( upper_strneq( str, dsntk, dsnlen ) ) - { - dsnid = DSN_NAMED; - } - else - { - dsnid = DSN_NOMATCH; - } - - continue; + dsnid = DSN_DEFAULT; + defaultdsn = DSN_DEFAULT; } - else if( dsnid == DSN_NOMATCH ) + else { - continue; + dsnid = DSN_NOMATCH; } - str = readtoken(str, token); + continue; + } + else if (upper_strneq (str, dsntk, dsnlen)) + { + dsnid = DSN_NAMED; + } + else + { + dsnid = DSN_NOMATCH; + } + + continue; + } + else if (dsnid == DSN_NOMATCH) + { + continue; + } - if( upper_strneq( keywd, token, STRLEN(keywd)) ) - { - str = readtoken(str, token); + str = readtoken (str, token); - if( ! STREQ( token, "=") ) - /* something other than = */ - { - continue; - } + if (upper_strneq (keywd, token, STRLEN (keywd))) + { + str = readtoken (str, token); - str = readtoken(str, token); + if (!STREQ (token, "=")) + /* something other than = */ + { + continue; + } - if( STRLEN(token) > size - 1) - { - break; - } + str = readtoken (str, token); - STRNCPY(value, token, size); - /* copy the value(i.e. next token) to buf */ + if (STRLEN (token) > size - 1) + { + break; + } - if( dsnid != DSN_DEFAULT ) - { - break; - } - } + STRNCPY (value, token, size); + /* copy the value(i.e. next token) to buf */ + + if (dsnid != DSN_DEFAULT) + { + break; + } } + } - fclose(file); + fclose (file); - return (*value)? value:NULL; + return (*value) ? value : NULL; } -char* _iodbcdm_getkeyvalinstr( - char* cnstr, - int cnlen, - char* keywd, - char* value, - int size ) -{ - char token[1024] = { '\0' }; - int flag = 0; - - if( cnstr == NULL || value == NULL - || keywd == NULL || size < 1 ) - { - return NULL; - } - if( cnlen == SQL_NTS ) +char * +_iodbcdm_getkeyvalinstr ( + char *cnstr, + int cnlen, + char *keywd, + char *value, + int size) +{ + char token[1024] = {'\0'}; + int flag = 0; + + if (cnstr == NULL || value == NULL + || keywd == NULL || size < 1) + { + return NULL; + } + + if (cnlen == SQL_NTS) + { + cnlen = STRLEN (cnstr); + } + + if (cnlen <= 0) + { + return NULL; + } + + for (;;) + { + cnstr = readtoken (cnstr, token); + + if (*token == '\0') { - cnlen = STRLEN (cnstr); + break; } - if( cnlen <= 0 ) + if (STREQ (token, ";")) { - return NULL; + flag = 0; + continue; } - for(;;) + switch (flag) { - cnstr = readtoken(cnstr, token); - - if( *token == '\0' ) - { - break; - } - - if( STREQ( token, ";" ) ) - { - flag = 0; - continue; - } - - switch(flag) - { - case 0: - if( upper_strneq(token, keywd, strlen(keywd)) ) - { - flag = 1; - } - break; - - case 1: - if( STREQ( token, "=" ) ) - { - flag = 2; - } - break; - - case 2: - if( size < strlen(token) + 1 ) - { - return NULL; - } - - STRNCPY( value, token, size ); - - return value; - - default: - break; - } + case 0: + if (upper_strneq (token, keywd, strlen (keywd))) + { + flag = 1; + } + break; + + case 1: + if (STREQ (token, "=")) + { + flag = 2; + } + break; + + case 2: + if (size < strlen (token) + 1) + { + return NULL; + } + + STRNCPY (value, token, size); + + return value; + + default: + break; } + } - return NULL; + return NULL; }