1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/**************************************************
* SQLGetInstalledDrivers
*
**************************************************
* This code was created by Peter Harvey @ CodeByDesign.
* Released under LGPL 28.JAN.99
*
* Contributions from...
* -----------------------------------------------
* Peter Harvey - pharvey@codebydesign.com
**************************************************/
#include <odbcinstext.h>
BOOL SQLGetInstalledDrivers( LPSTR pszBuf,
WORD nBufMax,
WORD *pnBufOut )
{
HINI hIni;
WORD nBufPos = 0;
WORD nToCopySize = 0;
char szObjectName[INI_MAX_OBJECT_NAME+1];
char szIniName[ INI_MAX_OBJECT_NAME + 1 ];
#ifdef VMS
sprintf( szIniName, "%sODBCINST.INI", odbcinst_system_file_path() );
#else
sprintf( szIniName, "%s/odbcinst.ini", odbcinst_system_file_path() );
#endif
#ifdef __OS2__
if ( iniOpen( &hIni, szIniName, "#;", '[', ']', '=', TRUE, 1L ) != INI_SUCCESS )
#else
if ( iniOpen( &hIni, szIniName, "#;", '[', ']', '=', TRUE ) != INI_SUCCESS )
#endif
{
inst_logPushMsg( __FILE__, __FILE__, __LINE__, LOG_CRITICAL, ODBC_ERROR_COMPONENT_NOT_FOUND, "" );
return FALSE;
}
memset( pszBuf, '\0', nBufMax );
iniObjectFirst( hIni );
while ( iniObjectEOL( hIni ) == FALSE )
{
iniObject( hIni, szObjectName );
if ( strcmp( szObjectName, "ODBC" ) == 0 )
{
iniObjectNext( hIni );
continue;
}
if ( (strlen( szObjectName )+1) > (nBufMax - nBufPos) )
{
nToCopySize = nBufMax - nBufPos;
strncpy( &(pszBuf[nBufPos]), szObjectName, nToCopySize );
nBufPos = nBufMax;
break;
}
else
{
strcpy( &(pszBuf[nBufPos]), szObjectName );
nBufPos += strlen( szObjectName )+1;
}
iniObjectNext( hIni );
}
iniClose( hIni );
if ( pnBufOut )
*pnBufOut = nBufPos-1;
return TRUE;
}
|