44 static const WCHAR drivers_key[] = {
'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
'O',
'D',
'B',
'C',
'\\',
'O',
'D',
'B',
'C',
'I',
'N',
'S',
'T',
'.',
'I',
'N',
'I',
'\\',
'O',
'D',
'B',
'C',
' ',
'D',
'r',
'i',
'v',
'e',
'r',
's',0};
45 static const WCHAR odbcW[] = {
'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
'O',
'D',
'B',
'C',0};
46 static const WCHAR odbcini[] = {
'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
'O',
'D',
'B',
'C',
'\\',
'O',
'D',
'B',
'C',
'I',
'N',
'S',
'T',
'.',
'I',
'N',
'I',
'\\',0};
47 static const WCHAR odbcdrivers[] = {
'O',
'D',
'B',
'C',
' ',
'D',
'r',
'i',
'v',
'e',
'r',
's',0};
48 static const WCHAR odbctranslators[] = {
'O',
'D',
'B',
'C',
' ',
'T',
'r',
'a',
'n',
's',
'l',
'a',
't',
'o',
'r',
's',0};
63 static const WCHAR odbc_error_general_err[] = {
'G',
'e',
'n',
'e',
'r',
'a',
'l',
' ',
'e',
'r',
'r',
'o',
'r',0};
64 static const WCHAR odbc_error_invalid_buff_len[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'b',
'u',
'f',
'f',
'e',
'r',
' ',
'l',
'e',
'n',
'g',
't',
'h',0};
65 static const WCHAR odbc_error_component_not_found[] = {
'C',
'o',
'm',
'p',
'o',
'n',
'e',
'n',
't',
' ',
'n',
'o',
't',
' ',
'f',
'o',
'u',
'n',
'd',0};
66 static const WCHAR odbc_error_out_of_mem[] = {
'O',
'u',
't',
' ',
'o',
'f',
' ',
'm',
'e',
'm',
'o',
'r',
'y',0};
67 static const WCHAR odbc_error_invalid_param_sequence[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'p',
'a',
'r',
'a',
'm',
'e',
't',
'e',
'r',
' ',
's',
'e',
'q',
'u',
'e',
'n',
'c',
'e',0};
68 static const WCHAR odbc_error_invalid_param_string[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'p',
'a',
'r',
'a',
'm',
'e',
't',
'e',
'r',
' ',
's',
't',
'r',
'i',
'n',
'g',0};
69 static const WCHAR odbc_error_invalid_dsn[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'D',
'S',
'N',0};
70 static const WCHAR odbc_error_load_lib_failed[] = {
'L',
'o',
'a',
'd',
' ',
'L',
'i',
'b',
'r',
'a',
'r',
'y',
' ',
'F',
'a',
'i',
'l',
'e',
'd',0};
71 static const WCHAR odbc_error_request_failed[] = {
'R',
'e',
'q',
'u',
'e',
's',
't',
' ',
'F',
'a',
'i',
'l',
'e',
'd',0};
72 static const WCHAR odbc_error_invalid_keyword[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'k',
'e',
'y',
'w',
'o',
'r',
'd',
' ',
'v',
'a',
'l',
'u',
'e',0};
111 FIXME(
"( %d %d %p %p) : stub!\n",
i,
j, p1, p2);
183 if (
len > buffer_length)
196 if (buffer_length > (
mode - 1))
201 *(
buffer+buffer_length-1) =
'\0';
211 ERR(
"transferring wide to narrow\n");
220 ERR(
"measuring wide to narrow\n");
310 HKEY hkey, hkeydriver;
343 ERR(
"Failed to write registry installed key\n");
471 FIXME(
"%s %p %d %p\n",
debugstr_w(lpszInfFile), lpszBuf, cbBufMax, pcbBufOut);
480 FIXME(
"%s %p %d %p\n",
debugstr_a(lpszInfFile), lpszBuf, cbBufMax, pcbBufOut);
488 TRACE(
"%p\n", pwConfigMode);
598 HKEY hkey, hkeyfilename, hkeysection;
612 return ret ?
NULL : hkeysection;
633 if (!defvalue || !
buff)
643 size = buff_len *
sizeof(*buff);
647 ret = (
size /
sizeof(*buff)) - 1;
723 size = buff_len *
sizeof(*buff);
727 ret = (
size /
sizeof(*buff)) - 1;
774 pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption);
785 pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption);
797 debugstr_w(lpszDriver), lpszPath, cbPathMax, pcbPathOut);
813 debugstr_a(lpszDriver), lpszPath, cbPathMax, pcbPathOut);
825 static const WCHAR installed[] = {
'I',
'n',
's',
't',
'a',
'l',
'l',
'e',
'd',0};
826 static const WCHAR slash[] = {
'\\', 0};
827 static const WCHAR driverW[] = {
'D',
'r',
'i',
'v',
'e',
'r',0};
828 static const WCHAR setupW[] = {
'S',
'e',
't',
'u',
'p',0};
829 static const WCHAR translator[] = {
'T',
'r',
'a',
'n',
's',
'l',
'a',
't',
'o',
'r',0};
830 HKEY hkey, hkeydriver;
837 ERR(
"Failed to write registry installed key\n");
846 DWORD usagecount = 0;
859 size =
sizeof(usagecount);
861 TRACE(
"Usage count %d\n", usagecount);
886 ERR(
"Out of memory\n");
916 ERR(
"Failed to write registry UsageCount key\n");
919 *usage_count = usagecount;
937 debugstr_w(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
938 fRequest, lpdwUsageCount);
947 if (lpszPathOut && cbPathOutMax >
len)
966 debugstr_a(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
967 fRequest, lpdwUsageCount);
973 fRequest, lpdwUsageCount);
981 *pcbPathOut =
len - 1;
983 if (!lpszPathOut || cbPathOutMax <
len)
1005 TRACE(
"(%p %d %p)\n", lpszPath, cbPathMax, pcbPathOut);
1017 if (lpszPath && cbPathMax >
len)
1032 TRACE(
"(%p %d %p)\n", lpszPath, cbPathMax, pcbPathOut);
1047 *pcbPathOut =
len - 1;
1049 if (!lpszPath || cbPathMax <
len)
1082 TRACE(
"%d %p %p %d %p\n", iError, pfErrorCode, lpszErrorMsg,
1083 cbErrorMsgMax, pcbErrorMsg);
1102 if (cbErrorMsgMax <
len)
1104 len = cbErrorMsgMax;
1107 if (lpszErrorMsg &&
len)
1132 if (lpszErrorMsg && cbErrorMsgMax > 0)
1133 *lpszErrorMsg =
'\0';
1144 TRACE(
"%d %p %p %d %p\n", iError, pfErrorCode, lpszErrorMsg,
1145 cbErrorMsgMax, pcbErrorMsg);
1148 if (lpszErrorMsg && cbErrorMsgMax)
1161 *pcbErrorMsg = cbBuf-1;
1175 debugstr_w(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
1176 fRequest, lpdwUsageCount);
1185 if (lpszPathOut && cbPathOutMax >
len)
1198 LPWSTR translator, pathin;
1205 debugstr_a(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
1206 fRequest, lpdwUsageCount);
1215 &cbOut, fRequest, lpdwUsageCount);
1223 *pcbPathOut =
len - 1;
1225 if (!lpszPathOut || cbPathOutMax <
len)
1248 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1254 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1264 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1270 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1328 DWORD usagecount = 1;
1342 size =
sizeof(usagecount);
1344 TRACE(
"Usage count %d\n", usagecount);
1345 count = usagecount - 1;
1349 ERR(
"Failed to write registry UsageCount key\n");
1361 ERR(
"Failed to delete registry key: %s\n",
debugstr_w(drivername));
1366 ERR(
"Failed to delete registry value: %s\n",
debugstr_w(drivername));
1375 *usage_count = usagecount;
1387 TRACE(
"%s %d %p\n",
debugstr_a(lpszDriver), fRemoveDSN, lpdwUsageCount);
1400 FIXME(
"%p\n", pdwUsageCount);
1401 if (pdwUsageCount) *pdwUsageCount = 1;
1424 DWORD usagecount = 1;
1439 size =
sizeof(usagecount);
1441 TRACE(
"Usage count %d\n", usagecount);
1442 count = usagecount - 1;
1446 ERR(
"Failed to write registry UsageCount key\n");
1460 WARN(
"Failed to delete registry key: %s\n",
debugstr_w(translator));
1469 WARN(
"Failed to delete registry key: %s\n",
debugstr_w(translator));
1480 if (
ret && usage_count)
1481 *usage_count = usagecount;
1504 TRACE(
"%u\n", wConfigMode);
1520 static const WCHAR invalid[] = {
'[',
']',
'{',
'}',
'(',
')',
',',
';',
'?',
'*',
'=',
'!',
'@',
'\\',0};
1534 static const char *
invalid =
"[]{}(),;?*=!@\\";
1591 if(!lpszFilename || !*lpszFilename)
1629 TRACE(
"%s %s %s %s\n", lpszSection, lpszEntry, lpszString, lpszFilename);
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
static const WCHAR invalid[]
BOOL WINAPI SQLWriteFileDSNW(LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPCWSTR lpszString)
#define ODBC_INSTALL_COMPLETE
static const WCHAR odbc_error_general_err[]
BOOL WINAPI SQLConfigDataSource(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes)
BOOL WINAPI SQLInstallDriverManagerW(LPWSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
BOOL WINAPI SQLInstallODBC(HWND hwndParent, LPCSTR lpszInfFile, LPCSTR lpszSrcPath, LPCSTR lpszDrivers)
BOOL WINAPI SQLInstallTranslatorEx(LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
static const WCHAR * error_msg[8]
BOOL WINAPI SQLInstallODBCW(HWND hwndParent, LPCWSTR lpszInfFile, LPCWSTR lpszSrcPath, LPCWSTR lpszDrivers)
BOOL WINAPI SQLCreateDataSource(HWND hwnd, LPCSTR lpszDS)
#define WideCharToMultiByte
#define ERROR_NO_MORE_ITEMS
BOOL WINAPI SQLRemoveDefaultDataSource(void)
ACPI_SIZE strlen(const char *String)
char * strpbrk(const char *String, const char *Delimiters)
#define ODBC_ERROR_LOAD_LIB_FAILED
static const WCHAR odbc_error_invalid_param_sequence[]
#define SQL_MAX_DSN_LENGTH
static BOOL write_config_value(const WCHAR *driver, const WCHAR *args)
static void write_registry_values(const WCHAR *regkey, const WCHAR *driver, const WCHAR *path_in, WCHAR *path, DWORD *usage_count)
BOOL WINAPI SQLWritePrivateProfileString(LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename)
#define HKEY_CURRENT_USER
GLuint GLuint GLsizei count
BOOL WINAPI SQLManageDataSources(HWND hwnd)
static WCHAR * heap_strdupAtoW(const char *str)
SQLRETURN WINAPI SQLPostInstallerError(DWORD fErrorCode, LPCSTR szErrorMsg)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
BOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR lpszDSN)
BOOL WINAPI SQLInstallTranslatorExW(LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
static void clear_errors(void)
BOOL WINAPI SQLWriteFileDSN(LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPCSTR lpszString)
BOOL WINAPI SQLInstallDriver(LPCSTR lpszInfFile, LPCSTR lpszDriver, LPSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
static void push_error(int code, LPCWSTR msg)
BOOL WINAPI SQLReadFileDSN(LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString, WORD cbString, WORD *pcbString)
int WINAPI SQLGetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR defvalue, LPWSTR buff, int buff_len, LPCWSTR filename)
static LPWSTR SQLInstall_strdup(LPCSTR str)
#define SQL_SUCCESS_WITH_INFO
static void * heap_realloc(void *mem, size_t len)
BOOL WINAPI SQLWriteDSNToIniW(LPCWSTR lpszDSN, LPCWSTR lpszDriver)
static void * heap_alloc(size_t len)
BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout)
BOOL WINAPI SQLInstallTranslator(LPCSTR lpszInfFile, LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
static const WCHAR odbc_error_invalid_buff_len[]
static const WCHAR filenameW[]
#define ODBC_ERROR_GENERAL_ERR
GLenum GLuint GLenum GLsizei const GLchar * buf
BOOL WINAPI SQLConfigDataSourceW(HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszAttributes)
BOOL WINAPI SQLGetAvailableDriversW(LPCWSTR lpszInfFile, LPWSTR lpszBuf, WORD cbBufMax, WORD *pcbBufOut)
static const WCHAR driverW[]
static const WCHAR odbcini[]
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
#define ODBC_ERROR_COMPONENT_NOT_FOUND
#define ODBC_ERROR_INVALID_KEYWORD_VALUE
SQLRETURN WINAPI SQLPostInstallerErrorW(DWORD fErrorCode, LPCWSTR szErrorMsg)
static const WCHAR odbc_error_component_not_found[]
BOOL WINAPI SQLWriteDSNToIni(LPCSTR lpszDSN, LPCSTR lpszDriver)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
#define ODBC_ERROR_REQUEST_FAILED
static const WCHAR odbc_error_invalid_param_string[]
BOOL WINAPI SQLGetTranslatorW(HWND hwndParent, LPWSTR lpszName, WORD cbNameMax, WORD *pcbNameOut, LPWSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut, DWORD *pvOption)
LSTATUS WINAPI RegGetValueA(HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
static const WCHAR odbc_error_out_of_mem[]
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define ODBC_CONFIG_DRIVER
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
SQLRETURN WINAPI SQLInstallerError(WORD iError, DWORD *pfErrorCode, LPSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD *pcbErrorMsg)
SQLRETURN WINAPI SQLInstallerErrorW(WORD iError, DWORD *pfErrorCode, LPWSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD *pcbErrorMsg)
BOOL WINAPI ODBCCPlApplet(LONG i, LONG j, LONG *p1, LONG *p2)
BOOL WINAPI SQLValidDSN(LPCSTR lpszDSN)
LONG WINAPI RegEnumValueA(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpdwReserved, _Out_opt_ LPDWORD lpdwType, _Out_opt_ LPBYTE lpData, _Inout_opt_ LPDWORD lpcbData)
static const WCHAR odbc_error_request_failed[]
BOOL WINAPI SQLInstallDriverW(LPCWSTR lpszInfFile, LPCWSTR lpszDriver, LPWSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
BOOL WINAPI SQLConfigDriverW(HWND hwnd, WORD request, LPCWSTR driver, LPCWSTR args, LPWSTR msg, WORD msgmax, WORD *msgout)
BOOL WINAPI SQLRemoveDriver(LPCSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount)
BOOL WINAPI SQLConfigDriver(HWND hwnd, WORD request, LPCSTR driver, LPCSTR args, LPSTR msg, WORD msgmax, WORD *msgout)
BOOL WINAPI SQLGetConfigMode(UWORD *pwConfigMode)
static HKEY get_privateprofile_sectionkey(LPCWSTR section, LPCWSTR filename)
BOOL WINAPI SQLGetAvailableDrivers(LPCSTR lpszInfFile, LPSTR lpszBuf, WORD cbBufMax, WORD *pcbBufOut)
#define success(from, fromstr, to, tostr)
#define ODBC_ERROR_OUT_OF_MEM
static const WCHAR drivers_key[]
BOOL WINAPI SQLInstallDriverManager(LPSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
BOOL WINAPI SQLCreateDataSourceW(HWND hwnd, LPCWSTR lpszDS)
static HMODULE load_config_driver(const WCHAR *driver)
BOOL WINAPI SQLReadFileDSNW(LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString, WORD cbString, WORD *pcbString)
#define ODBC_ERROR_INVALID_DSN
#define ODBC_ERROR_INVALID_STR
BOOL WINAPI SQLSetConfigMode(UWORD wConfigMode)
BOOL WINAPI SQLInstallDriverEx(LPCSTR lpszDriver, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
#define ODBC_ERROR_INVALID_PARAM_SEQUENCE
GLsizeiptr const GLvoid GLenum usage
#define memcpy(s1, s2, n)
int WINAPI SQLGetPrivateProfileString(LPCSTR section, LPCSTR entry, LPCSTR defvalue, LPSTR buff, int buff_len, LPCSTR filename)
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
GLsizei const GLfloat * value
static BOOL SQLInstall_narrow(int mode, LPSTR buffer, LPCWSTR str, WORD str_length, WORD buffer_length, WORD *returned_length)
BOOL WINAPI SQLRemoveDriverManager(LPDWORD pdwUsageCount)
struct @1632::@1633 driver
static PEXPLICIT_ACCESSW *static HMODULE hmod
BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)
WINE_DEFAULT_DEBUG_CHANNEL(odbc)
int WINAPI lstrlenA(LPCSTR lpString)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
BOOL WINAPI SQLRemoveDriverW(LPCWSTR drivername, BOOL remove_dsn, LPDWORD usage_count)
BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR lpszDSN)
BOOL WINAPI SQLInstallTranslatorW(LPCWSTR lpszInfFile, LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
BOOL WINAPI SQLRemoveTranslator(LPCSTR lpszTranslator, LPDWORD lpdwUsageCount)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcspbrk(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_Control)
BOOL WINAPI SQLGetTranslator(HWND hwndParent, LPSTR lpszName, WORD cbNameMax, WORD *pcbNameOut, LPSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut, DWORD *pvOption)
static const WCHAR odbc_error_invalid_dsn[]
static const WCHAR odbcdrivers[]
#define MultiByteToWideChar
BOOL WINAPI SQLRemoveTranslatorW(const WCHAR *translator, DWORD *usage_count)
static const WCHAR odbc_error_load_lib_failed[]
static const WCHAR odbc_error_invalid_keyword[]
BOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszString, LPCWSTR lpszFilename)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
#define ERROR_CALL_NOT_IMPLEMENTED
#define GetProcAddress(x, y)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
GLuint GLuint GLsizei GLenum type
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
#define ODBC_ERROR_INVALID_BUFF_LEN
BOOL WINAPI SQLValidDSNW(LPCWSTR lpszDSN)
static const WCHAR odbctranslators[]
static unsigned char buff[32768]
#define HeapFree(x, y, z)
#define RegCloseKey(hKey)
BOOL WINAPI SQLInstallDriverExW(LPCWSTR lpszDriver, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
static BOOL heap_free(void *mem)
static LPWSTR SQLInstall_strdup_multi(LPCSTR str)
#define HKEY_LOCAL_MACHINE
GLuint const GLchar * name
static const WCHAR odbcW[]