]> git.saurik.com Git - wxWidgets.git/blobdiff - src/iodbc/misc.c
added an error message if a bitmap can't be addedto the image list
[wxWidgets.git] / src / iodbc / misc.c
index 76becac1b9d7bddf041306aa57162090ee867dfc..42b26a62b92a1b7fea43cafaa9eccaba190f8df7 100644 (file)
@@ -1,6 +1,6 @@
 /** miscellaneous functions
-       
-    Copyright (C) 1995 by Ke Jin <kejin@empress.com> 
+
+    Copyright (C) 1995 by Ke Jin <kejin@empress.com>
 
     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
     GNU General Public License for more details.
 **/
 
+#ifdef DLDAPI_OS2
+#  define INCL_DOSMODULEMGR                 /* Module Manager values */
+#  define INCL_DOSERRORS                    /* Error values          */
+#  include      <os2.h>
+#  include      <stdio.h>
+#endif
+
 #include       <../iodbc/iodbc.h>
 
 #include       <../iodbc/isql.h>
 #include       <../iodbc/isqlext.h>
 
 #include       <stdio.h>
+#include        <strings.h>
+
+#include        <unistd.h>
 
-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;
-
-       for(i=1;i<n;i++)
-       {
-               c1 = s1[i];
-               c2 = s2[i];
-
-               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( (c1 - c2) || !c1 || !c2 )
-               {
-                       break;
-               }
-       }
-
-       return (int)!(c1 - c2);
+        int     i;
+        char    c1, c2;
+
+        for(i=1;i<n;i++)
+        {
+                c1 = s1[i];
+                c2 = s2[i];
+
+                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( (c1 - c2) || !c1 || !c2 )
+                {
+                        break;
+                }
+        }
+
+        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;
+        for(; *istr && *istr != '\n' ; istr ++ )
+        {
+                char c, nx;
 
-               c = *(istr);
+                c = *(istr);
 
-               if( c == ' ' || c == '\t' )
-               {
-                       continue;
-               }
+                if( c == ' ' || c == '\t' )
+                {
+                        continue;
+                }
 
-               nx = *(istr + 1);
+                nx = *(istr + 1);
 
-               *obuf = c;
-               obuf ++;
+                *obuf = c;
+                obuf ++;
 
-               if( c == ';' || c == '=' )
-               {
-                       istr ++;
-                       break;
-               }
+                if( c == ';' || c == '=' )
+                {
+                        istr ++;
+                        break;
+                }
 
-               if( nx == ' ' || nx == '\t' || nx == ';' || nx == '=' )
-               {
-                       istr ++;
-                       break;
-               }
-       }
+                if( nx == ' ' || nx == '\t' || nx == ';' || nx == '=' )
+                {
+                        istr ++;
+                        break;
+                }
+        }
 
-       *obuf = '\0'; 
+        *obuf = '\0';
 
-       return istr;
+        return istr;
 }
 
-#if    !defined(WINDOWS) && !defined(WIN32) && !defined(OS2)
-# include      <pwd.h>
-# define       UNIX_PWD
+#if     !defined(WINDOWS) && !defined(WIN32) && !defined(OS2)
+# include       <pwd.h>
+# define        UNIX_PWD
 #endif
 
 static char*
-getinitfile(char* buf, int size)       
+getinitfile(char* buf, int size)
 {
-       int     i, j;
-       char*   ptr;
-
-       j = STRLEN("/odbc.ini") + 1;
-
-       if( size < j )
-       {
-               return NULL;
-       }
+        int     i, j;
+        char*   ptr;
 
-#if    !defined(UNIX_PWD)
-       
-       i = GetWindowsDirectory((LPSTR)buf, size );
+        j = STRLEN("/iodbc.ini") + 1;
 
-       if( i == 0 || i > size - j )
-       {
-               return NULL;
-       }
+        if( size < j )
+        {
+                return NULL;
+        }
 
-       sprintf( buf + i, "/odbc.ini");
-
-       return buf;
+#ifdef FIX_INI_FILE
+        sprintf( buf, "%s/iodbc.ini", DIR_INI_FILE );
 #else
-       ptr = (char*)getpwuid(getuid());        
-
-       if( ptr == NULL )
-       {
-               return NULL;
-       }
-
-       ptr = ((struct passwd*)ptr)->pw_dir;
-
-       if( ptr == NULL || *ptr == '\0' )
-       {
-               ptr = "/home";
-       }
-
-       if( size < STRLEN(ptr) + j )
-       {
-               return NULL;
-       }
-
-       sprintf( buf, "%s%s", ptr, "/.odbc.ini");
-       /* i.e. searching ~/.odbc.ini */ 
+#  ifdef OS2
+        *buf = '\0';
+        if( NULL != getenv("IODBC_INI") )
+        {
+                strcpy( buf, getenv("IODBC_INI") );
+        }
+        else
+        {
+                HMODULE         hModule;
+
+                if( NO_ERROR == DosQueryModuleHandle(DLL_NAME, &hModule) &&
+                    NO_ERROR == DosQueryModuleName(hModule, 256L, buf) )
+                {
+                        if( NULL != strrchr(buf, '.') )
+                                *(strchr(buf, '.')) = '\0';
+                        strcat( buf, ".ini" );
+                }
+                else
+                {
+                        strcpy( buf, "iodbc.ini" );
+                }
+
+        }
+        return buf;
+#  else
+#    if   !defined(UNIX_PWD)
+
+        i = GetWindowsDirectory((LPSTR)buf, size );
+
+        if( i == 0 || i > size - j )
+        {
+                return NULL;
+        }
+
+        sprintf( buf + i, "/iodbc.ini");
+
+        return buf;
+#    else
+        ptr = (char*)getpwuid(getuid());
+
+        if( ptr == NULL )
+        {
+                return NULL;
+        }
+
+        ptr = ((struct passwd*)ptr)->pw_dir;
+
+        if( ptr == NULL || *ptr == '\0' )
+        {
+                ptr = "/home";
+        }
+
+        if( size < STRLEN(ptr) + j )
+        {
+                return NULL;
+        }
+
+        sprintf( buf, "%s%s", ptr, "/.iodbc.ini");
+        /* i.e. searching ~/.iodbc.ini */
+#    endif
+#  endif
 #endif
 
-       return buf;
+        return buf;
 }
 
-char*  _iodbcdm_getkeyvalbydsn(
-               char*   dsn,            
-               int     dsnlen, 
-               char*   keywd, 
-               char*   value, 
-               int     size )
+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 
+ * key from named or defaulted dsn section
  */
 {
-       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;
-
-       if( dsn == NULL || *dsn == 0 )
-       {
-               dsn = "default";
-               dsnlen = STRLEN(dsn);
-       }
-
-       if( dsnlen == SQL_NTS )
-       {
-               dsnlen = STRLEN(dsn);
-       }
-
-       if( dsnlen <= 0 || keywd == NULL || buf == 0 || size <= 0 )
-       {
-               return NULL;
-       }
-
-       if( dsnlen > sizeof(dsntk) - 2  )
-       {
-               return NULL;
-       }
-
-       value[0] = '\0';
-
-       STRNCAT( dsntk, dsn, dsnlen );
-       STRCAT( dsntk, "]" );
-
-       dsnlen = dsnlen + 2;
-
-       path = getinitfile(pathbuf, sizeof(pathbuf));
-
-       if( path == NULL )
-       {
-               return NULL;
-       }
-
-       file = (FILE*)fopen(path, "r");
-
-       if( file == NULL )
-       {
-               return NULL;
-       }
-
-       for(;;)
-       {
-               char*   str;
-
-               str = fgets(buf, sizeof(buf), file);
-
-               if( str == NULL )
-               {
-                       break;
-               }
-
-               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 )
-                               {
-                                       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;
-               }
-               else if( dsnid == DSN_NOMATCH )
-               {
-                       continue;
-               }
-
-               str = readtoken(str, token);
-
-               if( upper_strneq( keywd, token, STRLEN(keywd)) )
-               {
-                       str = readtoken(str, token);
-
-                       if( ! STREQ( token, "=") )
-                       /* something other than = */
-                       {
-                               continue;
-                       }
-
-                       str = readtoken(str, token);
-
-                       if( STRLEN(token) > size - 1)
-                       {
-                               break;
-                       }
-
-                       STRNCPY(value, token, size);
-                       /* copy the value(i.e. next token) to buf */
-
-                       if( dsnid != DSN_DEFAULT )
-                       {
-                               break;
-                       }
-               }
-       }
-
-       fclose(file);
-
-       return (*value)? value:NULL;
+        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;
+
+        if( dsn == NULL || *dsn == 0 )
+        {
+                dsn = "default";
+                dsnlen = STRLEN(dsn);
+        }
+
+        if( dsnlen == SQL_NTS )
+        {
+                dsnlen = STRLEN(dsn);
+        }
+
+        if( dsnlen <= 0 || keywd == NULL || buf == 0 || size <= 0 )
+        {
+                return NULL;
+        }
+
+        if( dsnlen > sizeof(dsntk) - 2  )
+        {
+                return NULL;
+        }
+
+        value[0] = '\0';
+
+        STRNCAT( dsntk, dsn, dsnlen );
+        STRCAT( dsntk, "]" );
+
+        dsnlen = dsnlen + 2;
+
+        path = getinitfile(pathbuf, sizeof(pathbuf));
+
+        if( path == NULL )
+        {
+                return NULL;
+        }
+
+        file = (FILE*)fopen(path, "r");
+
+        if( file == NULL )
+        {
+                return NULL;
+        }
+
+        for(;;)
+        {
+                char*   str;
+
+                str = fgets(buf, sizeof(buf), file);
+
+                if( str == NULL )
+                {
+                        break;
+                }
+
+                strtok( str, "\n\r" );
+
+                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 )
+                                {
+                                        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;
+                }
+                else if( dsnid == DSN_NOMATCH )
+                {
+                        continue;
+                }
+
+                str = readtoken(str, token);
+
+                if( upper_strneq( keywd, token, STRLEN(keywd)) )
+                {
+                        str = readtoken(str, token);
+
+                        if( ! STREQ( token, "=") )
+                        /* something other than = */
+                        {
+                                continue;
+                        }
+
+                        str = readtoken(str, token);
+
+                        if( STRLEN(token) > size - 1)
+                        {
+                                break;
+                        }
+
+                        STRNCPY(value, token, size);
+                        /* copy the value(i.e. next token) to buf */
+
+                        if( dsnid != DSN_DEFAULT )
+                        {
+                                break;
+                        }
+                }
+        }
+
+        fclose(file);
+
+        return (*value)? value:NULL;
 }
 
-char*  _iodbcdm_getkeyvalinstr( 
-               char*   cnstr, 
-               int     cnlen, 
-               char*   keywd,
-               char*   value,
-               int     size )
+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' )
-               {
-                       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;
-               }
-       }
-
-       return  NULL;
+        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' )
+                {
+                        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;
+                }
+        }
+
+        return  NULL;
 }