ReactOS 0.4.17-dev-966-gf06eace
misc.c File Reference
#include <wine/test.h>
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
#include "odbcinst.h"
Include dependency graph for misc.c:

Go to the source code of this file.

Macros

#define check_error(a)   check_error_(__LINE__, a)
 

Functions

static void check_error_ (int line, DWORD expect)
 
static void test_SQLConfigMode (void)
 
static void test_SQLInstallerError (void)
 
static void test_SQLInstallDriverManager (void)
 
static void test_SQLWritePrivateProfileString (void)
 
static void test_SQLGetPrivateProfileString (void)
 
static void test_SQLGetPrivateProfileStringW (void)
 
static void test_SQLInstallDriverEx (void)
 
static void test_SQLInstallTranslatorEx (void)
 
static void test_SQLGetInstalledDrivers (void)
 
static void test_SQLValidDSN (void)
 
static void test_SQLValidDSNW (void)
 
static void test_SQLConfigDataSource (void)
 
static BOOL check_dsn_exists (HKEY key, const WCHAR *dsn)
 
static void test_SQLWriteDSNToIni (void)
 
 START_TEST (misc)
 

Variables

static const WCHAR abcd_key [] = L"Software\\ODBC\\abcd.INI\\wineodbc"
 
static const WCHAR abcdini_key [] = L"Software\\ODBC\\abcd.INI"
 

Macro Definition Documentation

◆ check_error

#define check_error (   a)    check_error_(__LINE__, a)

Definition at line 38 of file misc.c.

Function Documentation

◆ check_dsn_exists()

static BOOL check_dsn_exists ( HKEY  key,
const WCHAR *  dsn 
)
static

Definition at line 879 of file misc.c.

880{
881 HKEY hkey;
882 WCHAR buffer[256];
883 LONG res;
884
885 wcscpy(buffer, L"Software\\ODBC\\ODBC.INI\\");
886 wcscat(buffer, dsn);
887
888 res = RegOpenKeyExW(key, buffer, 0, KEY_READ, &hkey);
889 if (!res)
890 RegCloseKey(hkey);
891
892 return res == ERROR_SUCCESS;
893}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
#define L(x)
Definition: resources.c:13
GLuint res
Definition: glext.h:9613
GLuint buffer
Definition: glext.h:5915
#define KEY_READ
Definition: nt_native.h:1026
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
wcscat
wcscpy
Definition: copy.c:22

Referenced by test_SQLWriteDSNToIni().

◆ check_error_()

static void check_error_ ( int  line,
DWORD  expect 
)
static

Definition at line 30 of file misc.c.

31{
33 DWORD err;
34 ret = SQLInstallerError(1, &err, NULL, 0, NULL);
35 ok_(__FILE__, line)(ret == SQL_SUCCESS_WITH_INFO, "got %d\n", ret);
36 ok_(__FILE__, line)(err == expect, "expected %lu, got %u\n", expect, ret);
37}
#define expect(EXPECTED, GOT)
Definition: SystemMenu.c:483
#define ok_(x1, x2)
Definition: atltest.h:61
#define NULL
Definition: types.h:112
return ret
Definition: mutex.c:147
unsigned long DWORD
Definition: ntddk_ex.h:95
#define err(...)
#define SQL_SUCCESS_WITH_INFO
Definition: sql.h:164
short RETCODE
Definition: sqltypes.h:28
Definition: parser.c:49
SQLRETURN WINAPI SQLInstallerError(WORD iError, DWORD *pfErrorCode, LPSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD *pcbErrorMsg)
Definition: odbccp32.c:1321

◆ START_TEST()

START_TEST ( misc  )

Definition at line 1037 of file misc.c.

1038{
1052}
static void test_SQLGetPrivateProfileStringW(void)
Definition: misc.c:313
static void test_SQLValidDSN(void)
Definition: misc.c:790
static void test_SQLInstallTranslatorEx(void)
Definition: misc.c:645
static void test_SQLValidDSNW(void)
Definition: misc.c:824
static void test_SQLGetPrivateProfileString(void)
Definition: misc.c:210
static void test_SQLInstallDriverEx(void)
Definition: misc.c:530
static void test_SQLWritePrivateProfileString(void)
Definition: misc.c:151
static void test_SQLGetInstalledDrivers(void)
Definition: misc.c:720
static void test_SQLConfigDataSource(void)
Definition: misc.c:854
static void test_SQLWriteDSNToIni(void)
Definition: misc.c:895
static void test_SQLConfigMode(void)
Definition: misc.c:40
static void test_SQLInstallDriverManager(void)
Definition: misc.c:91
static void test_SQLInstallerError(void)
Definition: misc.c:67

◆ test_SQLConfigDataSource()

static void test_SQLConfigDataSource ( void  )
static

Definition at line 854 of file misc.c.

855{
856 BOOL ret;
857
858 ret = SQLConfigDataSource(0, ODBC_ADD_DSN, "SQL Server", "DSN=WINEMQIS\0Database=MQIS\0\0");
859 todo_wine ok(ret, "got %d\n", ret);
860
861 ret = SQLConfigDataSource(0, ODBC_REMOVE_DSN, "SQL Server", "DSN=WINEMQIS\0\0");
862 todo_wine ok(ret, "got %d\n", ret);
863
864 ret = SQLConfigDataSource(0, ODBC_REMOVE_DSN, "SQL Server", "DSN=WINEMQIS\0\0");
865 if(!ret)
866 {
867 RETCODE ret;
868 DWORD err;
869 ret = SQLInstallerError(1, &err, NULL, 0, NULL);
870 ok(ret == SQL_SUCCESS_WITH_INFO, "got %d\n", ret);
871 todo_wine ok(err == ODBC_ERROR_INVALID_DSN, "got %lu\n", err);
872 }
873
874 ret = SQLConfigDataSource(0, ODBC_ADD_DSN, "ODBC driver", "DSN=ODBC data source\0\0");
875 ok(!ret, "got %d\n", ret);
877}
#define ok(value,...)
Definition: atltest.h:57
unsigned int BOOL
Definition: ntddk_ex.h:94
#define todo_wine
Definition: minitest.h:80
#define check_error(a)
Definition: misc.c:38
#define ODBC_ADD_DSN
Definition: odbcinst.h:12
#define ODBC_REMOVE_DSN
Definition: odbcinst.h:14
#define ODBC_ERROR_INVALID_DSN
Definition: odbcinst.h:39
#define ODBC_ERROR_COMPONENT_NOT_FOUND
Definition: odbcinst.h:36
BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR attributes)
Definition: odbccp32.c:442

Referenced by START_TEST().

◆ test_SQLConfigMode()

static void test_SQLConfigMode ( void  )
static

Definition at line 40 of file misc.c.

41{
42 BOOL bool_ret;
44 RETCODE sql_ret;
46 int i;
47
48 ok(SQLGetConfigMode(NULL), "SQLGetConfigMode(NULL) should succeed\n");
49
50 bool_ret = SQLGetConfigMode(&config_mode);
51 ok(bool_ret && config_mode == ODBC_BOTH_DSN, "Failed to get the initial SQLGetConfigMode or it was not both\n");
52
53 /* try to set invalid mode */
55 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
56 ok(!bool_ret && sql_ret == SQL_SUCCESS_WITH_INFO && error_code == ODBC_ERROR_INVALID_PARAM_SEQUENCE, "SQLSetConfigMode with invalid argument did not fail correctly\n");
57
58 for (i = ODBC_SYSTEM_DSN; i >= ODBC_BOTH_DSN; --i)
59 {
60 ok(SQLSetConfigMode((UWORD)i), "SQLSetConfigMode Failed to set config mode\n");
61 bool_ret = SQLGetConfigMode(&config_mode);
62 ok(bool_ret && config_mode == i, "Failed to confirm SQLSetConfigMode.\n");
63 }
64 /* And that leaves it correctly on BOTH */
65}
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
Definition: glfuncs.h:248
unsigned short UWORD
Definition: lzx.c:49
#define ODBC_SYSTEM_DSN
Definition: odbcinst.h:30
#define ODBC_ERROR_INVALID_PARAM_SEQUENCE
Definition: odbcinst.h:44
#define ODBC_BOTH_DSN
Definition: odbcinst.h:28
BOOL WINAPI SQLSetConfigMode(UWORD wConfigMode)
Definition: odbccp32.c:1740
static int error_code[8]
Definition: odbccp32.c:53
BOOL WINAPI SQLGetConfigMode(UWORD *pwConfigMode)
Definition: odbccp32.c:633
SQLRETURN WINAPI SQLInstallerErrorW(WORD iError, DWORD *pfErrorCode, LPWSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD *pcbErrorMsg)
Definition: odbccp32.c:1262
static UWORD config_mode
Definition: odbccp32.c:46

Referenced by START_TEST().

◆ test_SQLGetInstalledDrivers()

static void test_SQLGetInstalledDrivers ( void  )
static

Definition at line 720 of file misc.c.

721{
722 char buffer[1000], *p;
723 WORD written, len;
724 BOOL ret, sql_ret;
726 int found = 0;
727
728 ret = SQLInstallDriverEx("Wine test\0Driver=test.dll\0\0", NULL, buffer,
729 sizeof(buffer), &written, ODBC_INSTALL_COMPLETE, NULL);
730 ok(ret, "SQLInstallDriverEx failed: %d\n", ret);
731 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
733 {
734 skip("not enough privileges\n");
735 return;
736 }
737
738 ret = SQLGetInstalledDrivers(NULL, sizeof(buffer), &written);
739 ok(!ret, "got %d\n", ret);
741
742 ret = SQLGetInstalledDrivers(buffer, 0, &written);
743 ok(!ret, "got %d\n", ret);
745
747 ok(ret, "got %d\n", ret);
748 ok(strlen(buffer) == 8, "got len %u\n", lstrlenA(buffer));
749 ok(!buffer[9], "buffer not doubly null-terminated\n");
750
751 ret = SQLGetInstalledDrivers(buffer, 10, &written);
752 ok(ret, "got %d\n", ret);
753 ok(strlen(buffer) == 8, "got len %u\n", lstrlenA(buffer));
754 ok(written == 10, "got written %d\n", written);
755 ok(!buffer[9], "buffer not doubly null-terminated\n");
756
757 ret = SQLGetInstalledDrivers(buffer, sizeof(buffer), &written);
758 ok(ret, "got %d\n", ret);
759 ok(!buffer[written-1] && !buffer[written-2], "buffer not doubly null-terminated\n");
760 len = strlen(buffer);
761
762 for (p = buffer; *p; p += strlen(p) + 1)
763 {
764 if (!strcmp(p, "Wine test"))
765 found = 1;
766 }
767 ok(found, "installed driver not found\n");
768
769 ret = SQLGetInstalledDrivers(buffer, len, &written);
770 ok(ret, "got %d\n", ret);
771 ok(strlen(buffer) == len-2, "expected len %d, got %u\n", len-2, lstrlenA(buffer));
772 ok(written == len, "expected written %d, got %d\n", len, written);
773 ok(!buffer[len-1], "buffer not doubly null-terminated\n");
774
775 ret = SQLGetInstalledDrivers(buffer, len+1, &written);
776 ok(ret, "got %d\n", ret);
777 ok(strlen(buffer) == len-1, "expected len %d, got %u\n", len-1, lstrlenA(buffer));
778 ok(written == len+1, "expected written %d, got %d\n", len+1, written);
779 ok(!buffer[len], "buffer not doubly null-terminated\n");
780
781 ret = SQLGetInstalledDrivers(buffer, len+2, &written);
782 ok(ret, "got %d\n", ret);
783 ok(strlen(buffer) == len, "expected len %d, got %u\n", len, lstrlenA(buffer));
784 ok(written == len+2, "expected written %d, got %d\n", len+2, written);
785 ok(!buffer[len+1], "buffer not doubly null-terminated\n");
786
787 SQLRemoveDriver("Wine test", TRUE, NULL);
788}
#define skip(...)
Definition: atltest.h:64
#define TRUE
Definition: types.h:120
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3324
unsigned short WORD
Definition: ntddk_ex.h:93
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define ODBC_INSTALL_COMPLETE
Definition: odbcinst.h:20
#define ODBC_ERROR_WRITING_SYSINFO_FAILED
Definition: odbcinst.h:49
#define ODBC_ERROR_INVALID_BUFF_LEN
Definition: odbcinst.h:32
BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)
Definition: odbccp32.c:710
BOOL WINAPI SQLInstallDriverEx(LPCSTR lpszDriver, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
Definition: odbccp32.c:1138
BOOL WINAPI SQLRemoveDriver(LPCSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount)
Definition: odbccp32.c:1563

Referenced by START_TEST().

◆ test_SQLGetPrivateProfileString()

static void test_SQLGetPrivateProfileString ( void  )
static

Definition at line 210 of file misc.c.

211{
212 int ret;
213 char buffer[256] = {0};
214 LONG reg_ret;
215
216 strcpy(buffer, "wine");
217 ret = SQLGetPrivateProfileString(NULL, "testing" , "default", buffer, 256, "ODBC.INI");
218 ok(ret == 0, "SQLGetPrivateProfileString returned %d\n", ret);
219 ok(!strcmp(buffer, ""), "incorrect string '%s'\n", buffer);
220
221 strcpy(buffer, "wine");
222 ret = SQLGetPrivateProfileString("wineodbc", NULL , "default", buffer, 256, "ODBC.INI");
223 ok(ret == 0, "SQLGetPrivateProfileString returned %d\n", ret);
224 ok(!strcmp(buffer, ""), "incorrect string '%s'\n", buffer);
225
226 strcpy(buffer, "value");
227 ret = SQLGetPrivateProfileString("wineodbc", "testing" , NULL, buffer, 256, "ODBC.INI");
228 ok(ret == 0, "SQLGetPrivateProfileString returned %d\n", ret);
229 ok(!strcmp(buffer, ""), "incorrect string '%s'\n", buffer);
230
231 ret = SQLGetPrivateProfileString("wineodbc", "testing" , "defaultX", buffer, 256, "ODBC.INI");
232 ok(ret == strlen("defaultX"), "SQLGetPrivateProfileString returned %d\n", ret);
233 ok(!strcmp(buffer, "defaultX"), "incorrect string '%s'\n", buffer);
234
235 ret = SQLGetPrivateProfileString("wineodbc", "testing" , "defaultX", buffer, 4, "ODBC.INI");
236 ok(ret == strlen("def"), "SQLGetPrivateProfileString returned %d\n", ret);
237 ok(!strcmp(buffer, "def"), "incorrect string '%s'\n", buffer);
238
239 ret = SQLGetPrivateProfileString("wineodbc", "testing" , "defaultX", buffer, 8, "ODBC.INI");
240 ok(ret == strlen("default"), "SQLGetPrivateProfileString returned %d\n", ret);
241 ok(!strcmp(buffer, "default"), "incorrect string '%s'\n", buffer);
242
243 ret = SQLGetPrivateProfileString("wineodbc", "testing" , "defaultX", NULL, 256, "ODBC.INI");
244 ok(ret == 0, "SQLGetPrivateProfileString returned %d\n", ret);
245
246 strcpy(buffer, "value");
247 ret = SQLGetPrivateProfileString("wineodbc", "testing" , "defaultX", buffer, 0, "ODBC.INI");
248 ok(ret == 0, "SQLGetPrivateProfileString returned %d\n", ret);
249 ok(!strcmp(buffer, "value"), "incorrect string '%s'\n", buffer);
250
251 ret = SQLWritePrivateProfileString("wineodbc", "testing" , "value0123456789", "abcd.ini");
252 ok(ret, "SQLWritePrivateProfileString failed\n");
253 if(ret)
254 {
255 HKEY hkey;
256
257 ret = SQLGetPrivateProfileString("wineodbc", "testing" , "defaultY", buffer, 256, "abcd.ini");
258 ok(ret == strlen("value0123456789"), "SQLGetPrivateProfileString returned %d\n", ret);
259 ok(!strcmp(buffer, "value0123456789"), "incorrect string '%s'\n", buffer);
260
261 ret = SQLGetPrivateProfileString("wineodbc", "testing" , "defaultY", NULL, 0, "abcd.ini");
262 ok(ret == 0, "SQLGetPrivateProfileString returned %d\n", ret);
263
264 ret = SQLGetPrivateProfileString("wineodbc", "testing" , "defaultY", buffer, 7, "abcd.ini");
265 ok(ret == 6, "SQLGetPrivateProfileString returned %d\n", ret);
266
267 strcpy(buffer, "wine");
268 ret = SQLGetPrivateProfileString("wineodbc", NULL , "", buffer, 10, "abcd.ini");
269 ok(ret == (strlen("testing")+1), "SQLGetPrivateProfileString returned %d\n", ret);
270 ok(!strcmp(buffer, "testing"), "incorrect string '%s'\n", buffer);
271
272 ret = SQLWritePrivateProfileString("wineodbc", "value" , "0", "abcd.ini");
273 ok(ret, "SQLWritePrivateProfileString failed\n");
274
275 strcpy(buffer, "wine");
276 ret = SQLGetPrivateProfileString("wineodbc", NULL , "", buffer, 256, "abcd.ini");
277 ok(ret == (strlen("testing") + strlen("value")+2), "SQLGetPrivateProfileString returned %d\n", ret);
278 if(ret >= (strlen("testing") + strlen("value")+2))
279 {
280 ok(memcmp(buffer, "testing\0value\0", 14) == 0, "incorrect string '%s'\n", buffer);
281 }
282
283 strcpy(buffer, "XXXXXXXXXXXXXXX");
284 ret = SQLGetPrivateProfileString("wineodbc", NULL , "", buffer, 10, "abcd.ini");
285 ok(ret == (strlen("testing")+1), "SQLGetPrivateProfileString returned %d\n", ret);
286 if(ret >= (strlen("testing")+1))
287 {
288 ok(!strcmp(buffer, "testing"), "incorrect string '%s'\n", buffer);
289 /* Show that the buffer is cleared and partial enteries aren't added */
290 ok(memcmp(buffer, "testing\0X", 9) != 0, "incorrect string '%s'\n", buffer);
291 }
292
293 strcpy(buffer, "wine");
294 ret = SQLGetPrivateProfileString("wineodbc", NULL , "", buffer, 2, "abcd.ini");
295 ok(ret == 0, "SQLGetPrivateProfileString returned %d\n", ret);
296
297 reg_ret = RegOpenKeyExW(HKEY_CURRENT_USER, abcd_key, 0, KEY_READ, &hkey);
298 ok(reg_ret == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
299 if(reg_ret == ERROR_SUCCESS)
300 {
302 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed\n");
303
304 RegCloseKey(hkey);
305 }
306
307 /* Cleanup key */
309 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed\n");
310 }
311}
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
Definition: reg.c:1239
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
static const WCHAR abcdini_key[]
Definition: misc.c:28
static const WCHAR abcd_key[]
Definition: misc.c:27
strcpy
Definition: string.h:131
int WINAPI SQLGetPrivateProfileString(LPCSTR section, LPCSTR entry, LPCSTR defvalue, LPSTR buff, int buff_len, LPCSTR filename)
Definition: odbccp32.c:847
BOOL WINAPI SQLWritePrivateProfileString(LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename)
Definition: odbccp32.c:1961
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by START_TEST().

◆ test_SQLGetPrivateProfileStringW()

static void test_SQLGetPrivateProfileStringW ( void  )
static

Definition at line 313 of file misc.c.

314{
315 UWORD orig_mode;
316 int ret;
317 WCHAR buffer[256] = {0};
318 LONG reg_ret;
319
320 lstrcpyW(buffer, L"wine");
321 ret = SQLGetPrivateProfileStringW(NULL, L"testing", L"default", buffer, 256, L"ODBC.INI");
322 ok(ret == 0, "SQLGetPrivateProfileStringW returned %d\n", ret);
323 ok(!lstrcmpW(buffer, L"wine"), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
324
325 lstrcpyW(buffer, L"wine");
326 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL , L"default", buffer, 256, L"ODBC.INI");
327 ok(ret == 0, "SQLGetPrivateProfileStringW returned %d\n", ret);
328 ok(!lstrcmpW(buffer, L""), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
329
330 lstrcpyW(buffer, L"value");
331 ret = SQLGetPrivateProfileStringW(L"wineodbc", L"testing", NULL, buffer, 256, L"ODBC.INI");
332 ok(ret == 0, "SQLGetPrivateProfileStringW returned %d\n", ret);
333 ok(!lstrcmpW(buffer, L""), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
334
335 ret = SQLGetPrivateProfileStringW(L"wineodbc", L"testing", L"default", buffer, 256, L"ODBC.INI");
336 ok(ret == lstrlenW(L"default"), "SQLGetPrivateProfileStringW returned %d\n", ret);
337 ok(!lstrcmpW(buffer, L"default"), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
338
339 ret = SQLGetPrivateProfileStringW(L"wineodbc", L"testing", L"default", buffer, 4, L"ODBC.INI");
340 ok(ret == lstrlenW(L"def"), "SQLGetPrivateProfileStringW returned %d\n", ret);
341 ok(!lstrcmpW(buffer, L"def"), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
342
343 ret = SQLGetPrivateProfileStringW(L"wineodbc", L"testing", L"default", buffer, 8, L"ODBC.INI");
344 ok(ret == lstrlenW(L"default"), "SQLGetPrivateProfileStringW returned %d\n", ret);
345 ok(!lstrcmpW(buffer, L"default"), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
346
347 ret = SQLGetPrivateProfileStringW(L"wineodbc", L"testing", L"default", NULL, 256, L"ODBC.INI");
348 ok(ret == 0, "SQLGetPrivateProfileStringW returned %d\n", ret);
349
350 lstrcpyW(buffer, L"value");
351 ret = SQLGetPrivateProfileStringW(L"wineodbc", L"testing", L"default", buffer, 0, L"ODBC.INI");
352 ok(ret == 0, "SQLGetPrivateProfileStringW returned %d\n", ret);
353 ok(!lstrcmpW(buffer, L"value"), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
354
355 ret = SQLWritePrivateProfileString("wineodbc", "testing" , "value0123456789", "abcd.ini");
356 ok(ret, "SQLWritePrivateProfileString failed\n");
357 if(ret)
358 {
359 HKEY hkey;
360
361 ret = SQLGetPrivateProfileStringW(L"wineodbc", L"testing", L"default", buffer, 256, L"abcd.INI");
362 ok(ret == lstrlenW(L"value0123456789"), "SQLGetPrivateProfileStringW returned %d\n", ret);
363 ok(!lstrcmpW(buffer, L"value0123456789"), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
364
365 ret = SQLGetPrivateProfileStringW(L"wineodbc", L"testing", L"default", NULL, 0, L"abcd.INI");
366 ok(ret == 0, "SQLGetPrivateProfileStringW returned %d\n", ret);
367
368 ret = SQLGetPrivateProfileStringW(L"wineodbc", L"testing", L"default", buffer, 7, L"abcd.INI");
369 ok(ret == 6, "SQLGetPrivateProfileStringW returned %d\n", ret);
370
371 lstrcpyW(buffer, L"wine");
372 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL , L"", buffer, 10, L"abcd.INI");
373 ok(ret == lstrlenW(L"testing") + 1, "SQLGetPrivateProfileStringW returned %d\n", ret);
374 ok(!lstrcmpW(buffer, L"testing"), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
375
376 ret = SQLWritePrivateProfileString("wineodbc", "value" , "0", "abcd.ini");
377 ok(ret, "SQLWritePrivateProfileString failed\n");
378
379 lstrcpyW(buffer, L"wine");
380 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL , L"", buffer, 256, L"abcd.INI");
381 ok(ret == (lstrlenW(L"testing") + lstrlenW(L"value") + 2), "SQLGetPrivateProfileStringW returned %d\n", ret);
382 if(ret == (lstrlenW(L"testing") + lstrlenW(L"value") + 2))
383 {
384 ok(!memcmp(buffer, L"testing\0value", sizeof(L"testing\0value")),
385 "incorrect string '%s'\n", wine_dbgstr_wn(buffer, ret));
386 }
387
388 lstrcpyW(buffer, L"value");
389 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL , L"", buffer, 10, L"abcd.INI");
390 ok(ret == lstrlenW(L"testing") + 1, "SQLGetPrivateProfileStringW returned %d\n", ret);
391 if(ret >= lstrlenW(L"testing") + 1)
392 {
393 ok(!lstrcmpW(buffer, L"testing"), "incorrect string '%s'\n", wine_dbgstr_w(buffer));
394 }
395
396 lstrcpyW(buffer, L"value");
397 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL , L"", buffer, 2, L"abcd.INI");
398 ok(ret == 0, "SQLGetPrivateProfileStringW returned %d\n", ret);
399
400 reg_ret = RegOpenKeyExW(HKEY_CURRENT_USER, abcd_key, 0, KEY_READ, &hkey);
401 ok(reg_ret == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
402 if(reg_ret == ERROR_SUCCESS)
403 {
405 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed\n");
406
407 RegCloseKey(hkey);
408 }
409
410 /* Cleanup key */
412 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed\n");
413 }
414
415 ret = SQLGetConfigMode(&orig_mode);
416 ok(ret, "SQLGetConfigMode failed\n");
417
419 ok(ret, "SQLSetConfigMode failed\n");
420
421 ret = SQLWritePrivateProfileStringW(L"wineodbc", L"testing" , L"value", L"ODBC.INI");
422 if (!ret)
423 {
427 {
428 win_skip("not enough privileges\n");
429 SQLSetConfigMode(orig_mode);
430 return;
431 }
432 }
433 ok(ret, "SQLWritePrivateProfileString failed\n");
434
435 ret = SQLWritePrivateProfileStringW(L"wineodbc1", L"testing" , L"systemdsn", L"ODBC.INI");
436 ok(ret, "SQLWritePrivateProfileString failed\n");
437
438 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL, L"", buffer, 256, L"ODBC.INI");
439 ok(ret, "SQLGetPrivateProfileStringW failed\n");
440
442 ok(ret, "SQLSetConfigMode failed\n");
443
444 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL, L"", buffer, 256, L"ODBC.INI");
445 ok(!ret, "SQLGetPrivateProfileStringW succeeded\n");
446
447 ret = SQLWritePrivateProfileStringW(L"wineodbc1", L"testing" , L"userdsn", L"ODBC.INI");
448 ok(ret, "SQLWritePrivateProfileString failed\n");
449
451 ok(ret, "SQLSetConfigMode failed\n");
452
453 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL, L"", buffer, 256, L"ODBC.INI");
454 ok(ret, "SQLGetPrivateProfileStringW failed\n");
455
456 reg_ret = RegDeleteKeyW(HKEY_LOCAL_MACHINE, L"Software\\ODBC\\ODBC.INI\\wineodbc");
457 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed %ld\n", reg_ret);
458
459 /* Show existing USER DSN is checked before MACHINE */
460 ret = SQLWritePrivateProfileStringW(L"wineodbc1", L"testing" , L"bothdsn", L"ODBC.INI");
461 ok(ret, "SQLWritePrivateProfileString failed\n");
462
464 ok(ret, "SQLSetConfigMode failed\n");
465
466 ret = SQLGetPrivateProfileStringW(L"wineodbc1", L"testing", L"", buffer, 256, L"ODBC.INI");
467 ok(ret, "SQLGetPrivateProfileStringW failed\n");
468 ok(!wcscmp(buffer, L"systemdsn"), "Wrong value\n");
469
470 reg_ret = RegDeleteKeyW(HKEY_CURRENT_USER, L"Software\\ODBC\\ODBC.INI\\wineodbc1");
471 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed %ld\n", reg_ret);
472
473 reg_ret = RegDeleteKeyW(HKEY_LOCAL_MACHINE, L"Software\\ODBC\\ODBC.INI\\wineodbc1");
474 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed %ld\n", reg_ret);
475
477 ok(ret, "SQLSetConfigMode failed\n");
478
479 /* Writes to USER if no key found */
480 ret = SQLWritePrivateProfileStringW(L"wineodbc1", L"testing" , L"userwrite", L"ODBC.INI");
481 ok(ret, "SQLWritePrivateProfileString failed\n");
482
484 ok(ret, "SQLSetConfigMode failed\n");
485
486 ret = SQLGetPrivateProfileStringW(L"wineodbc1", L"testing", L"", buffer, 256, L"ODBC.INI");
487 ok(ret, "SQLGetPrivateProfileStringW failed\n");
488 ok(!wcscmp(buffer, L"userwrite"), "Wrong value\n");
489
490 reg_ret = RegDeleteKeyW(HKEY_CURRENT_USER, L"Software\\ODBC\\ODBC.INI\\wineodbc1");
491 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed %ld\n", reg_ret);
492
494 ok(ret, "SQLSetConfigMode failed\n");
495
496 ret = SQLWritePrivateProfileStringW(L"wineodbc", L"testing" , L"value", L"ODBC.INI");
497 ok(ret, "SQLWritePrivateProfileString failed\n");
498
499 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL, L"", buffer, 256, L"ODBC.INI");
500 ok(ret, "SQLGetPrivateProfileStringW failed\n");
501
502 ret = SQLWritePrivateProfileStringW(L"wineodbc", L"testing" , L"value", L"ODBCINST.INI");
503 ok(ret, "SQLWritePrivateProfileString failed\n");
504
505 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL, L"", buffer, 256, L"ODBCINST.INI");
506 ok(ret, "SQLGetPrivateProfileStringW failed\n");
507
508 reg_ret = RegDeleteKeyW(HKEY_LOCAL_MACHINE, L"Software\\ODBC\\ODBCINST.INI\\wineodbc");
509 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed %ld\n", reg_ret);
510
512 ok(ret, "SQLSetConfigMode failed\n");
513
514 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL, L"", buffer, 256, L"ODBC.INI");
515 ok(!ret, "SQLGetPrivateProfileStringW succeeded\n");
516
518 ok(ret, "SQLSetConfigMode failed\n");
519
520 ret = SQLGetPrivateProfileStringW(L"wineodbc", NULL, L"", buffer, 256, L"ODBC.INI");
521 ok(ret, "SQLGetPrivateProfileStringW failed\n");
522
523 reg_ret = RegDeleteKeyW(HKEY_CURRENT_USER, L"Software\\ODBC\\ODBC.INI\\wineodbc");
524 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed %ld\n", reg_ret);
525
526 ret = SQLSetConfigMode(orig_mode);
527 ok(ret, "SQLSetConfigMode failed\n");
528}
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
#define wine_dbgstr_w
Definition: kernel32.h:34
#define win_skip
Definition: minitest.h:67
#define ODBC_USER_DSN
Definition: odbcinst.h:29
#define wine_dbgstr_wn
Definition: testlist.c:2
int WINAPI SQLGetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR defvalue, LPWSTR buff, int buff_len, LPCWSTR filename)
Definition: odbccp32.c:765
BOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszString, LPCWSTR lpszFilename)
Definition: odbccp32.c:1903
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by START_TEST().

◆ test_SQLInstallDriverEx()

static void test_SQLInstallDriverEx ( void  )
static

Definition at line 530 of file misc.c.

531{
532 char path[MAX_PATH];
533 char syspath[MAX_PATH];
534 WORD size = 0;
535 BOOL ret, sql_ret;
536 DWORD cnt, error_code = 0;
537 HKEY hkey;
538 LONG res;
539 char error[1000];
540
542
543 ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver", "CPTimeout=59", error, sizeof(error), NULL);
544 ok(!ret, "SQLConfigDriver returned %d\n", ret);
545 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
546 ok(sql_ret && error_code == ODBC_ERROR_COMPONENT_NOT_FOUND, "SQLConfigDriver returned %d, %lu\n", sql_ret, error_code);
547
548 ret = SQLInstallDriverEx("WINE ODBC Driver\0Driver=sample.dll\0Setup=sample.dll\0\0", NULL,
550 ok(ret, "SQLInstallDriverEx failed\n");
551 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
553 {
554 win_skip("not enough privileges\n");
555 return;
556 }
557 ok(sql_ret == SQL_NO_DATA || (sql_ret && error_code == SQL_SUCCESS), "SQLInstallDriverEx failed %d, %lu\n", sql_ret, error_code);
558 ok(!strcmp(path, syspath), "invalid path %s\n", path);
559
560 sql_ret = 0;
561 ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver", NULL, error, sizeof(error), NULL);
562 ok(!ret, "SQLConfigDriver failed '%s'\n",error);
563
564 ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver", "CPTimeout=59\0NoWrite=60\0", error, sizeof(error), NULL);
565 ok(ret, "SQLConfigDriver failed\n");
566 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
567 ok(sql_ret == SQL_NO_DATA || (sql_ret && error_code == SQL_SUCCESS), "SQLConfigDriver failed %d, %lu\n", sql_ret, error_code);
568
569 ret = SQLInstallDriverEx("WINE ODBC Driver Path\0Driver=sample.dll\0Setup=sample.dll\0\0", "c:\\temp", path, MAX_PATH, &size, ODBC_INSTALL_COMPLETE, NULL);
570 ok(ret, "SQLInstallDriverEx failed\n");
571 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
572 ok(sql_ret == SQL_NO_DATA || (sql_ret && error_code == SQL_SUCCESS), "SQLInstallDriverEx failed %d, %lu\n", sql_ret, error_code);
573 ok(!strcmp(path, "c:\\temp"), "invalid path %s\n", path);
574
575 ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver Path", "empty", error, sizeof(error), NULL);
576 ok(!ret, "SQLConfigDriver successful\n");
577 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
578 ok(sql_ret && error_code == ODBC_ERROR_INVALID_KEYWORD_VALUE, "SQLConfigDriver failed %d, %lu\n", sql_ret, error_code);
579
580 ret = SQLConfigDriver(NULL, ODBC_CONFIG_DRIVER, "WINE ODBC Driver Path", "NoWrite=60;xxxx=555", error, sizeof(error), NULL);
581 ok(ret, "SQLConfigDriver failed\n");
582 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
583 ok(sql_ret == SQL_NO_DATA || (sql_ret && error_code == SQL_SUCCESS), "SQLConfigDriver failed %d, %lu\n", sql_ret, error_code);
584
585 if (ret)
586 {
587 DWORD type = 0xdeadbeef, size = MAX_PATH;
588
589 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\ODBC\\ODBCINST.INI\\WINE ODBC Driver", 0, KEY_READ, &hkey);
590 ok(res == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
591 if (res == ERROR_SUCCESS)
592 {
593 char driverpath[MAX_PATH];
594
595 strcpy(driverpath, syspath);
596 strcat(driverpath, "\\sample.dll");
597
598 memset(path, 0, sizeof(path));
599 res = RegQueryValueExA(hkey, "Driver", NULL, &type, (BYTE *)path, &size);
600 ok(res == ERROR_SUCCESS, "got %ld\n", res);
601 ok(type == REG_SZ, "got %lu\n", type);
602 ok(size == strlen(driverpath) + 1, "got %lu\n", size);
603 ok(!strcmp(path, driverpath), "invalid path %s\n", path);
604
605 res = RegQueryValueExA(hkey, "CPTimeout", NULL, &type, (BYTE *)&path, &size);
606 ok(res == ERROR_SUCCESS, "got %ld\n", res);
607 ok(type == REG_SZ, "got %lu\n", type);
608 ok(size == strlen("59") + 1, "got %lu\n", size);
609 ok(!strcmp(path, "59"), "invalid value %s\n", path);
610
611 res = RegQueryValueExA(hkey, "NoWrite", NULL, &type, (BYTE *)&path, &size);
612 ok(res == ERROR_FILE_NOT_FOUND, "got %ld\n", res);
613
614 RegCloseKey(hkey);
615 }
616
617 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\ODBC\\ODBCINST.INI\\WINE ODBC Driver Path", 0, KEY_READ, &hkey);
618 ok(res == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
619 if (res == ERROR_SUCCESS)
620 {
621 size = sizeof(path);
622 res = RegQueryValueExA(hkey, "NoWrite", NULL, &type, (BYTE *)&path, &size);
623 ok(res == ERROR_SUCCESS, "got %ld\n", res);
624 ok(type == REG_SZ, "got %lu\n", type);
625 ok(size == strlen("60;xxxx=555") + 1, "got %lu\n", size);
626 ok(!strcmp(path, "60;xxxx=555"), "invalid value %s\n", path);
627
628 res = RegQueryValueExA(hkey, "CPTimeout", NULL, &type, (BYTE *)&path, &size);
629 ok(res == ERROR_FILE_NOT_FOUND, "got %ld\n", res);
630 RegCloseKey(hkey);
631 }
632 }
633
634 cnt = 100;
635 ret = SQLRemoveDriver("WINE ODBC Driver", FALSE, &cnt);
636 ok(ret, "SQLRemoveDriver failed\n");
637 ok(cnt == 0, "SQLRemoveDriver failed %ld\n", cnt);
638
639 cnt = 100;
640 ret = SQLRemoveDriver("WINE ODBC Driver Path", FALSE, &cnt);
641 ok(ret, "SQLRemoveDriver failed\n");
642 ok(cnt == 0, "SQLRemoveDriver failed %ld\n", cnt);
643}
#define REG_SZ
Definition: layer.c:22
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3298
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4009
#define MAX_PATH
Definition: compat.h:34
UINT WINAPI GetSystemDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
Definition: path.c:2301
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
#define error(str)
Definition: mkdosfs.c:1605
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define ODBC_CONFIG_DRIVER
Definition: odbcinst.h:23
#define ODBC_ERROR_INVALID_KEYWORD_VALUE
Definition: odbcinst.h:38
strcat
Definition: string.h:92
#define memset(x, y, z)
Definition: compat.h:39
#define SQL_SUCCESS
Definition: sql.h:163
#define SQL_NO_DATA
Definition: sql.h:315
_In_ size_t cnt
Definition: wcstombs.cpp:43
BOOL WINAPI SQLConfigDriver(HWND hwnd, WORD request, LPCSTR driver, LPCSTR args, LPSTR msg, WORD msgmax, WORD *msgout)
Definition: odbccp32.c:545
unsigned char BYTE
Definition: xxhash.c:193

Referenced by START_TEST().

◆ test_SQLInstallDriverManager()

static void test_SQLInstallDriverManager ( void  )
static

Definition at line 91 of file misc.c.

92{
93 BOOL bool_ret;
94 RETCODE sql_ret;
96 CHAR target_path[MAX_PATH];
97 WORD path_out;
98
99 /* NULL check */
100 bool_ret = SQLInstallDriverManager(NULL, 0, NULL);
101 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
102 ok(!bool_ret, "SQLInstallDriverManager unexpectedly succeeded\n");
104 "Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN\n");
105
106 /* Length smaller than MAX_PATH */
107 bool_ret = SQLInstallDriverManager(target_path, MAX_PATH / 2, NULL);
108 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
109 ok(!bool_ret, "SQLInstallDriverManager unexpectedly succeeded\n");
111 "Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN\n");
112
113 path_out = 0xcafe;
114 bool_ret = SQLInstallDriverManager(target_path, MAX_PATH / 2, &path_out);
115 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
116 ok(!bool_ret, "SQLInstallDriverManager unexpectedly succeeded\n");
118 "Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN\n");
119 ok(path_out == 0xcafe, "Expected path_out to not have changed\n");
120
121 /* Length OK */
122 bool_ret = SQLInstallDriverManager(target_path, MAX_PATH, NULL);
123 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
125 {
126 win_skip("not enough privileges\n");
127 return;
128 }
129 ok(bool_ret, "SQLInstallDriverManager unexpectedly failed: %ld\n",
130 error_code);
131 if (bool_ret)
132 ok(sql_ret == SQL_NO_DATA, "Expected SQL_NO_DATA, got %d\n", sql_ret);
133 else
134 ok(sql_ret == SQL_SUCCESS_WITH_INFO,
135 "Expected SQL_SUCCESS_WITH_INFO, got %d\n", sql_ret);
136
137 path_out = 0xcafe;
138 bool_ret = SQLInstallDriverManager(target_path, MAX_PATH, &path_out);
139 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
140 ok(bool_ret, "SQLInstallDriverManager unexpectedly failed: %ld\n",
141 error_code);
142 if (bool_ret)
143 ok(sql_ret == SQL_NO_DATA, "Expected SQL_NO_DATA, got %d\n", sql_ret);
144 else
145 ok(sql_ret == SQL_SUCCESS_WITH_INFO,
146 "Expected SQL_SUCCESS_WITH_INFO, got %d\n", sql_ret);
147 /* path_out should in practice be less than 0xcafe */
148 ok(path_out != 0xcafe, "Expected path_out to show the correct amount of bytes\n");
149}
char CHAR
Definition: pedump.c:57
BOOL WINAPI SQLInstallDriverManager(LPSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
Definition: odbccp32.c:1208

Referenced by START_TEST().

◆ test_SQLInstallerError()

static void test_SQLInstallerError ( void  )
static

Definition at line 67 of file misc.c.

68{
69 RETCODE sql_ret;
70
71 /* MSDN states that the error number should be between 1 and 8. Passing 0 is an error */
72 sql_ret = SQLInstallerError(0, NULL, NULL, 0, NULL);
73 ok(sql_ret == SQL_ERROR, "SQLInstallerError(0...) failed with %d instead of SQL_ERROR\n", sql_ret);
74 /* However numbers greater than 8 do not return SQL_ERROR.
75 * I am currently unsure as to whether it should return SQL_NO_DATA or "the same as for error 8";
76 * I have never been able to generate 8 errors to test it
77 */
78 sql_ret = SQLInstallerError(65535, NULL, NULL, 0, NULL);
79 ok(sql_ret == SQL_NO_DATA, "SQLInstallerError(>8...) failed with %d instead of SQL_NO_DATA\n", sql_ret);
80
81 /* Force an error to work with. This should generate ODBC_ERROR_INVALID_BUFF_LEN */
82 ok(!SQLGetInstalledDrivers(0, 0, 0), "Failed to force an error for testing\n");
83 sql_ret = SQLInstallerError(2, NULL, NULL, 0, NULL);
84 ok(sql_ret == SQL_NO_DATA, "Too many errors when forcing an error for testing\n");
85
86 /* Null pointers are acceptable in all obvious places */
87 sql_ret = SQLInstallerError(1, NULL, NULL, 0, NULL);
88 ok(sql_ret == SQL_SUCCESS_WITH_INFO, "SQLInstallerError(null addresses) failed with %d instead of SQL_SUCCESS_WITH_INFO\n", sql_ret);
89}
#define SQL_ERROR
Definition: sql.h:68

Referenced by START_TEST().

◆ test_SQLInstallTranslatorEx()

static void test_SQLInstallTranslatorEx ( void  )
static

Definition at line 645 of file misc.c.

646{
647 char path[MAX_PATH];
648 char syspath[MAX_PATH];
649 WORD size = 0;
650 BOOL ret, sql_ret;
651 DWORD cnt, error_code = 0;
652 HKEY hkey;
653 LONG res;
654
656
657 ret = SQLInstallTranslatorEx("WINE ODBC Translator\0Translator=sample.dll\0Setup=sample.dll\0",
659 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
661 {
662 win_skip("not enough privileges\n");
663 return;
664 }
665 ok(sql_ret && error_code == SQL_SUCCESS, "SQLInstallDriverEx failed %d, %lu\n", sql_ret, error_code);
666 ok(!strcmp(path, syspath), "invalid path %s\n", path);
667 ok(size == strlen(path), "invalid length %d\n", size);
668
669 ret = SQLInstallTranslatorEx("WINE ODBC Translator Path\0Translator=sample.dll\0Setup=sample.dll\0",
670 "c:\\temp", path, MAX_PATH, &size, ODBC_INSTALL_COMPLETE, NULL);
671 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
672 ok(sql_ret && error_code == SQL_SUCCESS, "SQLInstallTranslatorEx failed %d, %lu\n", sql_ret, error_code);
673 ok(!strcmp(path, "c:\\temp"), "invalid path %s\n", path);
674 ok(size == strlen(path), "invalid length %d\n", size);
675
676 if(ret)
677 {
678 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\ODBC\\ODBCINST.INI\\WINE ODBC Translator", 0,
679 KEY_READ, &hkey);
680 ok(res == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
681 if (res == ERROR_SUCCESS)
682 {
683 DWORD type = 0xdeadbeef, size = MAX_PATH;
684 char driverpath[MAX_PATH];
685
686 strcpy(driverpath, syspath);
687 strcat(driverpath, "\\sample.dll");
688
689 memset(path, 0, sizeof(path));
690 res = RegQueryValueExA(hkey, "Translator", NULL, &type, (BYTE *)path, &size);
691 ok(res == ERROR_SUCCESS, "RegGetValueA failed\n");
692 ok(type == REG_SZ, "got %lu\n", type);
693 ok(size == strlen(driverpath) + 1, "got %lu\n", size);
694 ok(!strcmp(path, driverpath), "invalid path %s\n", path);
695
696 RegCloseKey(hkey);
697 }
698 }
699
700 cnt = 100;
701 ret = SQLRemoveTranslator("WINE ODBC Translator", &cnt);
702 ok(ret, "SQLRemoveTranslator failed\n");
703 ok(cnt == 0, "SQLRemoveTranslator failed %ld\n", cnt);
704
705 cnt = 100;
706 ret = SQLRemoveTranslator("WINE ODBC Translator Path", &cnt);
707 ok(ret, "SQLRemoveTranslator failed\n");
708 ok(cnt == 0, "SQLRemoveTranslator failed %ld\n", cnt);
709
710 cnt = 100;
711 ret = SQLRemoveTranslator("WINE ODBC Translator NonExist", &cnt);
712 ok(!ret, "SQLRemoveTranslator succeeded\n");
713 ok(cnt == 100, "SQLRemoveTranslator succeeded %ld\n", cnt);
714 sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
716 "SQLInstallTranslatorEx failed %d, %lu\n", sql_ret, error_code);
717
718}
BOOL WINAPI SQLRemoveTranslator(LPCSTR lpszTranslator, LPDWORD lpdwUsageCount)
Definition: odbccp32.c:1725
BOOL WINAPI SQLInstallTranslatorEx(LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
Definition: odbccp32.c:1376

Referenced by START_TEST().

◆ test_SQLValidDSN()

static void test_SQLValidDSN ( void  )
static

Definition at line 790 of file misc.c.

791{
792 static const char *invalid = "[]{}(),;?*=!@\\";
793 char str[10];
794 int i;
795 BOOL ret;
796
798 ok(!ret, "got %d\n", ret);
799
800 strcpy(str, "wine10");
801 for(i = 0; i < strlen(invalid); i++)
802 {
803 str[4] = invalid[i];
805 ok(!ret, "got %d\n", ret);
806 }
807
808 /* Too large */
809 ret = SQLValidDSN("Wine123456789012345678901234567890");
810 ok(!ret, "got %d\n", ret);
811
812 /* Valid with a space */
813 ret = SQLValidDSN("Wine Vinegar");
814 ok(ret, "got %d\n", ret);
815
816 /* Max DSN name value */
817 ret = SQLValidDSN("12345678901234567890123456789012");
818 ok(ret, "got %d\n", ret);
819
820 ret = SQLValidDSN("");
821 ok(!ret, "got %d\n", ret);
822}
const WCHAR * str
BOOL WINAPI SQLValidDSN(LPCSTR lpszDSN)
Definition: odbccp32.c:1770

Referenced by START_TEST().

◆ test_SQLValidDSNW()

static void test_SQLValidDSNW ( void  )
static

Definition at line 824 of file misc.c.

825{
826 WCHAR str[10];
827 int i;
828 BOOL ret;
829
831 ok(!ret, "got %d\n", ret);
832
833 lstrcpyW(str, L"wine10");
834 for (i = 0; i < lstrlenW(L"[]{}(),;?*=!@\\"); i++)
835 {
836 str[4] = L"[]{}(),;?*=!@\\"[i];
838 ok(!ret, "got %d\n", ret);
839 }
840
841 ret = SQLValidDSNW(L"Wine123456789012345678901234567890");
842 ok(!ret, "got %d\n", ret);
843
844 ret = SQLValidDSNW(L"Wine Vinegar");
845 ok(ret, "got %d\n", ret);
846
847 ret = SQLValidDSNW(L"12345678901234567890123456789012");
848 ok(ret, "got %d\n", ret);
849
850 ret = SQLValidDSNW(L"");
851 ok(!ret, "got %d\n", ret);
852}
BOOL WINAPI SQLValidDSNW(LPCWSTR lpszDSN)
Definition: odbccp32.c:1757

Referenced by START_TEST().

◆ test_SQLWriteDSNToIni()

static void test_SQLWriteDSNToIni ( void  )
static

Definition at line 895 of file misc.c.

896{
897 BOOL ret;
898 char buffer[MAX_PATH];
899 char path[MAX_PATH];
900 DWORD type, size;
901
903
905 ok(!ret, "got %d\n", ret);
906
908 ok(!ret, "got %d\n", ret);
909
911 ok(!ret, "Found registry key\n");
912
913 ret = SQLWriteDSNToIni("wine_dbs", "SQL Server");
914 if (!ret)
915 {
916 win_skip("Doesn't have permission to write a System DSN\n");
917 return;
918 }
919
921 ok(ret, "Failed to find registry key\n");
922
924 ret = SQLWriteDSNToIni("wine_dbs", "SQL Server");
925 ok(ret, "got %d\n", ret);
926
928 ok(ret, "Failed to find registry key\n");
929
931
932 if(ret)
933 {
934 HKEY hkey;
935 LONG res;
936
937 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\ODBC\\ODBC.INI\\ODBC Data Sources", 0,
938 KEY_READ, &hkey);
939 ok(res == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
940 if (res == ERROR_SUCCESS)
941 {
942 type = 0xdeadbeef;
943 size = MAX_PATH;
944
945 memset(buffer, 0, sizeof(buffer));
946 res = RegQueryValueExA(hkey, "wine_dbs", NULL, &type, (BYTE *)buffer, &size);
947 ok(res == ERROR_SUCCESS, "RegGetValueA failed\n");
948 ok(type == REG_SZ, "got %lu\n", type);
949 ok(!strcmp(buffer, "SQL Server"), "incorrect string '%s'\n", buffer);
950
951 RegCloseKey(hkey);
952 }
953
955
956 /* ODBC_BOTH_DSN set and has both System/User DSN but only removes USER. */
957 ret = SQLRemoveDSNFromIni("wine_dbs");
958 ok(ret, "got %d\n", ret);
959
961 ok(!ret, "Found registry key\n");
962
964 ok(ret, "Failed to find registry key\n");
965
966 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\ODBC\\ODBC.INI\\wine_dbs", 0,
967 KEY_READ, &hkey);
968 ok(res == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
969 if (res == ERROR_SUCCESS)
970 {
971 type = 0xdeadbeef;
972 size = MAX_PATH;
973
974 memset(path, 0, sizeof(path));
975 res = RegQueryValueExA(hkey, "driver", NULL, &type, (BYTE *)path, &size);
976 ok(res == ERROR_SUCCESS, "RegGetValueA failed\n");
977 ok(type == REG_SZ, "got %lu\n", type);
978 /* WINE doesn't have a 'SQL Server' driver available */
979 todo_wine ok(strlen(path) != 0, "Invalid value\n");
980
981 RegCloseKey(hkey);
982 }
983
985
986 ret = SQLRemoveDSNFromIni("wine_dbs");
987 ok(ret, "got %d\n", ret);
988 }
989
990 /* Show that values are written, even though an invalid driver was specified. */
991 ret = SQLWriteDSNToIni("wine_mis", "Missing Access Driver (*.mis)");
992 ok(ret, "got %d\n", ret);
993 if(ret)
994 {
995 HKEY hkey;
996 LONG res;
997
998 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\ODBC\\ODBC.INI\\ODBC Data Sources", 0,
999 KEY_READ, &hkey);
1000 ok(res == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
1001 if (res == ERROR_SUCCESS)
1002 {
1003 type = 0xdeadbeef;
1004 size = MAX_PATH;
1005
1006 memset(buffer, 0, sizeof(buffer));
1007 res = RegQueryValueExA(hkey, "wine_mis", NULL, &type, (BYTE *)buffer, &size);
1008 ok(res == ERROR_SUCCESS, "RegGetValueA failed\n");
1009 ok(type == REG_SZ, "got %lu\n", type);
1010 ok(!strcmp(buffer, "Missing Access Driver (*.mis)"), "incorrect string '%s'\n", buffer);
1011
1012 RegCloseKey(hkey);
1013 }
1014
1015 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\ODBC\\ODBC.INI\\wine_mis", 0,
1016 KEY_READ, &hkey);
1017 ok(res == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
1018 if (res == ERROR_SUCCESS)
1019 {
1020 type = 0xdeadbeef;
1021 size = MAX_PATH;
1022
1023 memset(path, 0, sizeof(path));
1024 res = RegQueryValueExA(hkey, "driver", NULL, &type, (BYTE *)path, &size);
1025 ok(res == ERROR_SUCCESS, "RegGetValueA failed\n");
1026 ok(type == REG_SZ, "got %lu\n", type);
1027 ok(strlen(path) == 0, "Invalid value\n");
1028
1029 RegCloseKey(hkey);
1030 }
1031
1032 ret = SQLRemoveDSNFromIni("wine_mis");
1033 ok(ret, "got %d\n", ret);
1034 }
1035}
static BOOL check_dsn_exists(HKEY key, const WCHAR *dsn)
Definition: misc.c:879
BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR lpszDSN)
Definition: odbccp32.c:1640
BOOL WINAPI SQLWriteDSNToIni(LPCSTR lpszDSN, LPCSTR lpszDriver)
Definition: odbccp32.c:1863
BOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR lpszDSN)
Definition: odbccp32.c:1588

Referenced by START_TEST().

◆ test_SQLWritePrivateProfileString()

static void test_SQLWritePrivateProfileString ( void  )
static

Definition at line 151 of file misc.c.

152{
153 static const WCHAR odbc_key[] = L"Software\\ODBC\\ODBC.INI\\wineodbc";
154 BOOL ret;
155 LONG reg_ret;
157
158 ret = SQLWritePrivateProfileString("wineodbc", "testing" , "value", "");
159 ok(!ret, "SQLWritePrivateProfileString passed\n");
161 ok(error_code == ODBC_ERROR_INVALID_STR, "SQLInstallerErrorW ret: %ld\n", error_code);
162
163 ret = SQLWritePrivateProfileString("wineodbc", "testing" , "value", NULL);
164 ok(!ret, "SQLWritePrivateProfileString passed\n");
166 ok(error_code == ODBC_ERROR_INVALID_STR, "SQLInstallerErrorW ret: %ld\n", error_code);
167
168 ret = SQLWritePrivateProfileString("wineodbc", "testing" , "value", "odbc.ini");
169 ok(ret, "SQLWritePrivateProfileString failed\n");
170 if(ret)
171 {
172 HKEY hkey;
173
174 ret = SQLWritePrivateProfileString("wineodbc", "testing" , NULL, "odbc.ini");
175 ok(ret, "SQLWritePrivateProfileString failed\n");
176
177 reg_ret = RegOpenKeyExW(HKEY_CURRENT_USER, odbc_key, 0, KEY_READ, &hkey);
178 ok(reg_ret == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
179 if(reg_ret == ERROR_SUCCESS)
180 {
181 reg_ret = RegDeleteKeyW(HKEY_CURRENT_USER, odbc_key);
182 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed\n");
183
184 RegCloseKey(hkey);
185 }
186 }
187
188 ret = SQLWritePrivateProfileString("wineodbc", "testing" , "value", "abcd.ini");
189 ok(ret, "SQLWritePrivateProfileString failed\n");
190 if(ret)
191 {
192 HKEY hkey;
193
194 reg_ret = RegOpenKeyExW(HKEY_CURRENT_USER, abcd_key, 0, KEY_READ, &hkey);
195 ok(reg_ret == ERROR_SUCCESS, "RegOpenKeyExW failed\n");
196 if(reg_ret == ERROR_SUCCESS)
197 {
199 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed\n");
200
201 RegCloseKey(hkey);
202 }
203
204 /* Cleanup key */
206 ok(reg_ret == ERROR_SUCCESS, "RegDeleteKeyW failed\n");
207 }
208}
#define ODBC_ERROR_INVALID_STR
Definition: odbcinst.h:34

Referenced by START_TEST().

Variable Documentation

◆ abcd_key

const WCHAR abcd_key[] = L"Software\\ODBC\\abcd.INI\\wineodbc"
static

◆ abcdini_key

const WCHAR abcdini_key[] = L"Software\\ODBC\\abcd.INI"
static