Modified:
myodbc3S/MYODBCSetupDataSourceDialog.cpp
myodbc3u/MYODBCUtil.h
myodbc3u/MYODBCUtilClearDataSource.c
myodbc3u/MYODBCUtilFreeDataSource.c
myodbc3u/MYODBCUtilReadConnectStr.c
myodbc3u/MYODBCUtilReadDataSource.c
myodbc3u/MYODBCUtilReadDataSourceStr.c
Log:
Fixed the problem with MS Access and other GUI applications when SQL_DRIVER_PROMPT is
used. Allocation of DSN parameters, passed from/to myodbc3S module, is being performed in
Global Heap.
Modified: myodbc3S/MYODBCSetupDataSourceDialog.cpp
===================================================================
--- myodbc3S/MYODBCSetupDataSourceDialog.cpp 2006-02-22 00:09:12 UTC (rev 33)
+++ myodbc3S/MYODBCSetupDataSourceDialog.cpp 2006-02-23 18:00:48 UTC (rev 34)
@@ -227,44 +227,44 @@
#if QT_VERSION >= 0x040000
if ( !ptab1->getDataSourceName().isEmpty() )
- pDataSource->pszDSN = strdup( ptab1->getDataSourceName().toAscii() );
+ pDataSource->pszDSN = _global_strdup(
ptab1->getDataSourceName().toAscii() );
if ( !ptab1->getDescription().isEmpty() )
- pDataSource->pszDESCRIPTION = strdup( ptab1->getDescription().toAscii()
);
+ pDataSource->pszDESCRIPTION = _global_strdup(
ptab1->getDescription().toAscii() );
if ( !ptab1->getServer().isEmpty() )
- pDataSource->pszSERVER = strdup( ptab1->getServer().toAscii() );
+ pDataSource->pszSERVER = _global_strdup( ptab1->getServer().toAscii()
);
if ( !ptab1->getUser().isEmpty() )
- pDataSource->pszUSER = strdup( ptab1->getUser().toAscii() );
+ pDataSource->pszUSER = _global_strdup( ptab1->getUser().toAscii() );
if ( !ptab1->getPassword().isEmpty() )
- pDataSource->pszPASSWORD = strdup( ptab1->getPassword().toAscii() );
+ pDataSource->pszPASSWORD = _global_strdup(
ptab1->getPassword().toAscii() );
if ( !ptab1->getDatabase().isEmpty() )
- pDataSource->pszDATABASE = strdup( ptab1->getDatabase().toAscii() );
+ pDataSource->pszDATABASE = _global_strdup(
ptab1->getDatabase().toAscii() );
if ( !ptab2->getPort().isEmpty() )
- pDataSource->pszPORT = strdup( ptab2->getPort().toAscii() );
+ pDataSource->pszPORT = _global_strdup( ptab2->getPort().toAscii() );
if ( !ptab2->getSocket().isEmpty() )
- pDataSource->pszSOCKET = strdup( ptab2->getSocket().toAscii() );
+ pDataSource->pszSOCKET = _global_strdup( ptab2->getSocket().toAscii()
);
if ( !ptab2->getInitialStatement().isEmpty() )
- pDataSource->pszSTMT = strdup( ptab2->getInitialStatement().toAscii()
);
+ pDataSource->pszSTMT = _global_strdup(
ptab2->getInitialStatement().toAscii() );
#else
if ( !ptab1->getDataSourceName().isEmpty() )
- pDataSource->pszDSN = strdup( ptab1->getDataSourceName().ascii() );
+ pDataSource->pszDSN = _global_strdup(
ptab1->getDataSourceName().ascii() );
if ( !ptab1->getDescription().isEmpty() )
- pDataSource->pszDESCRIPTION = strdup( ptab1->getDescription().ascii()
);
+ pDataSource->pszDESCRIPTION = _global_strdup(
ptab1->getDescription().ascii() );
if ( !ptab1->getServer().isEmpty() )
- pDataSource->pszSERVER = strdup( ptab1->getServer().ascii() );
+ pDataSource->pszSERVER = _global_strdup( ptab1->getServer().ascii() );
if ( !ptab1->getUser().isEmpty() )
- pDataSource->pszUSER = strdup( ptab1->getUser().ascii() );
+ pDataSource->pszUSER = _global_strdup( ptab1->getUser().ascii() );
if ( !ptab1->getPassword().isEmpty() )
- pDataSource->pszPASSWORD = strdup( ptab1->getPassword().ascii() );
+ pDataSource->pszPASSWORD = _global_strdup( ptab1->getPassword().ascii()
);
if ( !ptab1->getDatabase().isEmpty() )
- pDataSource->pszDATABASE = strdup( ptab1->getDatabase().ascii() );
+ pDataSource->pszDATABASE = _global_strdup( ptab1->getDatabase().ascii()
);
if ( !ptab2->getPort().isEmpty() )
- pDataSource->pszPORT = strdup( ptab2->getPort().ascii() );
+ pDataSource->pszPORT = _global_strdup( ptab2->getPort().ascii() );
if ( !ptab2->getSocket().isEmpty() )
- pDataSource->pszSOCKET = strdup( ptab2->getSocket().ascii() );
+ pDataSource->pszSOCKET = _global_strdup( ptab2->getSocket().ascii() );
if ( !ptab2->getInitialStatement().isEmpty() )
- pDataSource->pszSTMT = strdup( ptab2->getInitialStatement().ascii() );
+ pDataSource->pszSTMT = _global_strdup(
ptab2->getInitialStatement().ascii() );
#endif
unsigned int nFlags = ptab3->getFlags();
Modified: myodbc3u/MYODBCUtil.h
===================================================================
--- myodbc3u/MYODBCUtil.h 2006-02-22 00:09:12 UTC (rev 33)
+++ myodbc3u/MYODBCUtil.h 2006-02-23 18:00:48 UTC (rev 34)
@@ -223,6 +223,18 @@
BOOL MYODBCUtilWriteConnectStr( MYODBCUTIL_DATASOURCE *pDataSource,
char *pszStr, SQLSMALLINT nMaxLen );
BOOL MYODBCUtilInsertStr( char *pszStr, LPCSTR pszStrIn, SQLSMALLINT
nMaxLen, int *pnIndex );
+#if defined(WIN32)
+char *strglobaldup( const char *s);
+char *strnglobaldup( const char *s, size_t n);
+#define _global_strdup(s) strglobaldup(s)
+#define _global_strndup(s, n) strnglobaldup(s, n)
+#define _global_free(p) GlobalFree(p)
+#else
+#define _global_strdup(s) strdup(s)
+#define _global_strndup(s) strndup(s)
+#define _global_free(p) free(p)
+#endif
+
#ifdef __cplusplus
}
#endif
Modified: myodbc3u/MYODBCUtilClearDataSource.c
===================================================================
--- myodbc3u/MYODBCUtilClearDataSource.c 2006-02-22 00:09:12 UTC (rev 33)
+++ myodbc3u/MYODBCUtilClearDataSource.c 2006-02-23 18:00:48 UTC (rev 34)
@@ -27,6 +27,7 @@
nMode, nConnect, and nPrompt.
*/
+
void MYODBCUtilClearDataSource( MYODBCUTIL_DATASOURCE *pDataSource )
{
if ( !pDataSource )
@@ -34,52 +35,52 @@
if ( pDataSource->pszDATABASE )
{
- free( pDataSource->pszDATABASE );
+ _global_free( pDataSource->pszDATABASE );
pDataSource->pszDATABASE = NULL;
}
if ( pDataSource->pszDESCRIPTION )
{
- free( pDataSource->pszDESCRIPTION );
+ _global_free( pDataSource->pszDESCRIPTION );
pDataSource->pszDESCRIPTION = NULL;
}
if ( pDataSource->pszDSN )
{
- free( pDataSource->pszDSN );
+ _global_free( pDataSource->pszDSN );
pDataSource->pszDSN = NULL;
}
if ( pDataSource->pszOPTION )
{
- free( pDataSource->pszOPTION );
+ _global_free( pDataSource->pszOPTION );
pDataSource->pszDSN = NULL;
}
if ( pDataSource->pszPASSWORD )
{
- free( pDataSource->pszPASSWORD );
+ _global_free( pDataSource->pszPASSWORD );
pDataSource->pszPASSWORD = NULL;
}
if ( pDataSource->pszPORT )
{
- free( pDataSource->pszPORT );
+ _global_free( pDataSource->pszPORT );
pDataSource->pszPORT = NULL;
}
if ( pDataSource->pszSERVER )
{
- free( pDataSource->pszSERVER );
+ _global_free( pDataSource->pszSERVER );
pDataSource->pszSERVER = NULL;
}
if ( pDataSource->pszSOCKET )
{
- free( pDataSource->pszSOCKET );
+ _global_free( pDataSource->pszSOCKET );
pDataSource->pszSOCKET = NULL;
}
if ( pDataSource->pszSTMT )
{
- free( pDataSource->pszSTMT );
+ _global_free( pDataSource->pszSTMT );
pDataSource->pszSTMT = NULL;
}
if ( pDataSource->pszUSER )
{
- free( pDataSource->pszUSER );
+ _global_free( pDataSource->pszUSER );
pDataSource->pszUSER = NULL;
}
}
Modified: myodbc3u/MYODBCUtilFreeDataSource.c
===================================================================
--- myodbc3u/MYODBCUtilFreeDataSource.c 2006-02-22 00:09:12 UTC (rev 33)
+++ myodbc3u/MYODBCUtilFreeDataSource.c 2006-02-23 18:00:48 UTC (rev 34)
@@ -31,9 +31,9 @@
MYODBCUtilClearDataSource( pDataSource );
if ( pDataSource->pszDriverFileName )
- free( pDataSource->pszDriverFileName );
+ _global_free( pDataSource->pszDriverFileName );
if ( pDataSource->pszDRIVER )
- free( pDataSource->pszDRIVER );
+ _global_free( pDataSource->pszDRIVER );
free( pDataSource );
}
Modified: myodbc3u/MYODBCUtilReadConnectStr.c
===================================================================
--- myodbc3u/MYODBCUtilReadConnectStr.c 2006-02-22 00:09:12 UTC (rev 33)
+++ myodbc3u/MYODBCUtilReadConnectStr.c 2006-02-23 18:00:48 UTC (rev 34)
@@ -105,18 +105,18 @@
if ( strcasecmp( pszName, "DATABASE" ) == 0 || strcasecmp(
pszName, "DB" ) == 0 )
{
if ( !pDataSource->pszDATABASE )
- pDataSource->pszDATABASE = (char *)strndup(
pAnchorChar, pScanChar - pAnchorChar ) ;
+ pDataSource->pszDATABASE = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar ) ;
}
else if ( strcasecmp( pszName, "DESCRIPTION" ) == 0 ||
strcasecmp( pszName, "DESC" ) == 0 )
{
if ( !pDataSource->pszDESCRIPTION )
- pDataSource->pszDESCRIPTION = (char *)strndup(
pAnchorChar, pScanChar - pAnchorChar );
+ pDataSource->pszDESCRIPTION = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "DRIVER" ) == 0 )
{
if ( !pDataSource->pszDRIVER &&
!pDataSource->pszDSN ) /* we use one or other - whichever comes 1st */
{
- pDataSource->pszDRIVER = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar ); /* friendly name such as; "MySQL ODBC 3.51 Driver" */
+ pDataSource->pszDRIVER = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar ); /* friendly name such as; "MySQL ODBC 3.51
Driver" */
pDataSource->nConnect =
MYODBCUTIL_DATASOURCE_CONNECT_DRIVER;
}
}
@@ -124,14 +124,14 @@
{
if ( !pDataSource->pszDSN &&
!pDataSource->pszDRIVER ) /* we use one or other - whichever comes 1st */
{
- pDataSource->pszDSN = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszDSN = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
pDataSource->nConnect =
MYODBCUTIL_DATASOURCE_CONNECT_DSN;
}
}
else if ( strcasecmp( pszName, "OPTION" ) == 0 )
{
if ( !pDataSource->pszOPTION )
- pDataSource->pszOPTION = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszOPTION = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
/*
MYODBC RULE
@@ -141,27 +141,27 @@
else if ( strcasecmp( pszName, "PWD" ) == 0 || strcasecmp(
pszName, "PASSWORD" ) == 0 )
{
if ( !pDataSource->pszPASSWORD )
- pDataSource->pszPASSWORD = (char *)strndup(
pAnchorChar, pScanChar - pAnchorChar );
+ pDataSource->pszPASSWORD = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "PORT" ) == 0 )
{
if ( !pDataSource->pszPORT )
- pDataSource->pszPORT = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszPORT = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "SERVER" ) == 0 )
{
if ( !pDataSource->pszSERVER )
- pDataSource->pszSERVER = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszSERVER = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "SOCKET" ) == 0 )
{
if ( !pDataSource->pszSOCKET )
- pDataSource->pszSOCKET = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszSOCKET = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "STMT" ) == 0 )
{
if ( !pDataSource->pszSTMT )
- pDataSource->pszSTMT = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszSTMT = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
/*
MYODBC RULE
@@ -171,7 +171,7 @@
else if ( strcasecmp( pszName, "UID" ) == 0 || strcasecmp(
pszName, "USER" ) == 0 )
{
if ( !pDataSource->pszUSER )
- pDataSource->pszUSER = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszUSER = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "SAVEFILE" ) == 0 )
{
Modified: myodbc3u/MYODBCUtilReadDataSource.c
===================================================================
--- myodbc3u/MYODBCUtilReadDataSource.c 2006-02-22 00:09:12 UTC (rev 33)
+++ myodbc3u/MYODBCUtilReadDataSource.c 2006-02-23 18:00:48 UTC (rev 34)
@@ -144,65 +144,65 @@
if ( strcasecmp( pszEntryName, "DATABASE" ) == 0 || strcasecmp( pszEntryName,
"DB" ) == 0 )
{
if ( !pDataSource->pszDATABASE )
- pDataSource->pszDATABASE = strdup( szValue ) ;
+ pDataSource->pszDATABASE = _global_strdup( szValue ) ;
}
else if ( strcasecmp( pszEntryName, "DESCRIPTION" ) == 0 || strcasecmp(
pszEntryName, "DESC" ) == 0 )
{
if ( !pDataSource->pszDESCRIPTION )
- pDataSource->pszDESCRIPTION = strdup( szValue );
+ pDataSource->pszDESCRIPTION = _global_strdup( szValue );
}
else if ( strcasecmp( pszEntryName, "DRIVER" ) == 0 )
{
#if defined(WIN32)
if ( !pDataSource->pszDriverFileName )
- pDataSource->pszDriverFileName = strdup( szValue );
+ pDataSource->pszDriverFileName = _global_strdup( szValue );
#else
if ( *szValue == '/' )
{
if ( !pDataSource->pszDriverFileName )
- pDataSource->pszDriverFileName = strdup( szValue );
+ pDataSource->pszDriverFileName = _global_strdup( szValue );
}
else
{
if ( !pDataSource->pszDRIVER )
- pDataSource->pszDRIVER = strdup( szValue );
+ pDataSource->pszDRIVER = _global_strdup( szValue );
}
#endif
}
else if ( strcasecmp( pszEntryName, "OPTION" ) == 0 )
{
if ( !pDataSource->pszOPTION )
- pDataSource->pszOPTION = strdup( szValue );
+ pDataSource->pszOPTION = _global_strdup( szValue );
}
else if ( strcasecmp( pszEntryName, "PWD" ) == 0 || strcasecmp( pszEntryName,
"PASSWORD" ) == 0 )
{
if ( !pDataSource->pszPASSWORD )
- pDataSource->pszPASSWORD = strdup( szValue );
+ pDataSource->pszPASSWORD = _global_strdup( szValue );
}
else if ( strcasecmp( pszEntryName, "PORT" ) == 0 )
{
if ( !pDataSource->pszPORT )
- pDataSource->pszPORT = strdup( szValue );
+ pDataSource->pszPORT = _global_strdup( szValue );
}
else if ( strcasecmp( pszEntryName, "SERVER" ) == 0 )
{
if ( !pDataSource->pszSERVER )
- pDataSource->pszSERVER = strdup( szValue );
+ pDataSource->pszSERVER = _global_strdup( szValue );
}
else if ( strcasecmp( pszEntryName, "SOCKET" ) == 0 )
{
if ( !pDataSource->pszSOCKET )
- pDataSource->pszSOCKET = strdup( szValue );
+ pDataSource->pszSOCKET = _global_strdup( szValue );
}
else if ( strcasecmp( pszEntryName, "STMT" ) == 0 )
{
if ( !pDataSource->pszSTMT )
- pDataSource->pszSTMT = strdup( szValue );
+ pDataSource->pszSTMT = _global_strdup( szValue );
}
else if ( strcasecmp( pszEntryName, "UID" ) == 0 || strcasecmp( pszEntryName,
"USER" ) == 0 )
{
if ( !pDataSource->pszUSER )
- pDataSource->pszUSER = strdup( szValue );
+ pDataSource->pszUSER = _global_strdup( szValue );
}
else
{
Modified: myodbc3u/MYODBCUtilReadDataSourceStr.c
===================================================================
--- myodbc3u/MYODBCUtilReadDataSourceStr.c 2006-02-22 00:09:12 UTC (rev 33)
+++ myodbc3u/MYODBCUtilReadDataSourceStr.c 2006-02-23 18:00:48 UTC (rev 34)
@@ -42,6 +42,41 @@
}
#endif
+#if defined(WIN32)
+char *strglobaldup( const char *s )
+{
+ size_t nAvail;
+ char *p;
+
+ nAvail = strlen(s) + 1;
+ p = (char*)GlobalAlloc( GMEM_FIXED, nAvail );
+ memcpy ( p, s, nAvail );
+
+ return p;
+}
+
+char *strnglobaldup( const char *s, size_t n )
+{
+ size_t nAvail;
+ char *p;
+
+ if ( !s )
+ return 0;
+
+ nAvail = min( strlen(s) + 1, n + 1 );
+
+ if ( nAvail < 1 )
+ return 0;
+
+ p = (char *)GlobalAlloc( GMEM_FIXED, nAvail );
+ memcpy( p, s, nAvail );
+ p[nAvail - 1] = '\0';
+
+ return p;
+}
+#endif
+
+
BOOL MYODBCUtilReadDataSourceStrValTerm( MYODBCUTIL_DELIM nDelim, char cChar )
{
switch ( nDelim )
@@ -160,27 +195,27 @@
if ( strcasecmp( pszName, "DATABASE" ) == 0 || strcasecmp(
pszName, "DB" ) == 0 )
{
if ( !pDataSource->pszDATABASE )
- pDataSource->pszDATABASE = (char *)strndup(
pAnchorChar, pScanChar - pAnchorChar ) ;
+ pDataSource->pszDATABASE = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar ) ;
}
else if ( strcasecmp( pszName, "DESCRIPTION" ) == 0 ||
strcasecmp( pszName, "DESC" ) == 0 )
{
if ( !pDataSource->pszDESCRIPTION )
- pDataSource->pszDESCRIPTION = (char *)strndup(
pAnchorChar, pScanChar - pAnchorChar );
+ pDataSource->pszDESCRIPTION = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "DRIVER" ) == 0 )
{
if ( !pDataSource->pszDRIVER )
- pDataSource->pszDRIVER = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszDRIVER = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "DSN" ) == 0 )
{
if ( !pDataSource->pszDSN )
- pDataSource->pszDSN = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszDSN = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "OPTION" ) == 0 )
{
if ( !pDataSource->pszOPTION )
- pDataSource->pszOPTION = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszOPTION = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
/*
MYODBC RULE
@@ -190,27 +225,27 @@
else if ( strcasecmp( pszName, "PWD" ) == 0 || strcasecmp(
pszName, "PASSWORD" ) == 0 )
{
if ( !pDataSource->pszPASSWORD )
- pDataSource->pszPASSWORD = (char *)strndup(
pAnchorChar, pScanChar - pAnchorChar );
+ pDataSource->pszPASSWORD = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "PORT" ) == 0 )
{
if ( !pDataSource->pszPORT )
- pDataSource->pszPORT = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszPORT = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "SERVER" ) == 0 )
{
if ( !pDataSource->pszSERVER )
- pDataSource->pszSERVER = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszSERVER = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "SOCKET" ) == 0 )
{
if ( !pDataSource->pszSOCKET )
- pDataSource->pszSOCKET = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszSOCKET = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else if ( strcasecmp( pszName, "STMT" ) == 0 )
{
if ( !pDataSource->pszSTMT )
- pDataSource->pszSTMT = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszSTMT = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
/*
MYODBC RULE
@@ -220,7 +255,7 @@
else if ( strcasecmp( pszName, "UID" ) == 0 || strcasecmp(
pszName, "USER" ) == 0 )
{
if ( !pDataSource->pszUSER )
- pDataSource->pszUSER = (char *)strndup( pAnchorChar,
pScanChar - pAnchorChar );
+ pDataSource->pszUSER = (char *)_global_strndup(
pAnchorChar, pScanChar - pAnchorChar );
}
else
{
| Thread |
|---|
| • Connector/ODBC 3.51 commit: r34 - myodbc3S myodbc3u | bdegtyariov | 23 Feb |