mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-04 23:04:05 +00:00
odbccp32: Use CRT allocation functions.
This commit is contained in:
parent
81a5a8f46b
commit
79e78218ec
|
@ -31,7 +31,6 @@
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
#include "sqlext.h"
|
#include "sqlext.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "wine/heap.h"
|
|
||||||
|
|
||||||
#include "odbcinst.h"
|
#include "odbcinst.h"
|
||||||
|
|
||||||
|
@ -88,7 +87,7 @@ static void clear_errors(void)
|
||||||
num_errors = 0;
|
num_errors = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline WCHAR *heap_strdupAtoW(const char *str)
|
static inline WCHAR *strdupAtoW(const char *str)
|
||||||
{
|
{
|
||||||
LPWSTR ret = NULL;
|
LPWSTR ret = NULL;
|
||||||
|
|
||||||
|
@ -96,7 +95,7 @@ static inline WCHAR *heap_strdupAtoW(const char *str)
|
||||||
DWORD len;
|
DWORD len;
|
||||||
|
|
||||||
len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
|
len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
|
||||||
ret = heap_alloc(len*sizeof(WCHAR));
|
ret = malloc(len * sizeof(WCHAR));
|
||||||
if(ret)
|
if(ret)
|
||||||
MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
|
MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
|
||||||
}
|
}
|
||||||
|
@ -125,7 +124,7 @@ static LPWSTR SQLInstall_strdup_multi(LPCSTR str)
|
||||||
;
|
;
|
||||||
|
|
||||||
len = MultiByteToWideChar(CP_ACP, 0, str, p - str, NULL, 0 );
|
len = MultiByteToWideChar(CP_ACP, 0, str, p - str, NULL, 0 );
|
||||||
ret = HeapAlloc(GetProcessHeap(), 0, (len+1)*sizeof(WCHAR));
|
ret = malloc((len + 1) * sizeof(WCHAR));
|
||||||
MultiByteToWideChar(CP_ACP, 0, str, p - str, ret, len );
|
MultiByteToWideChar(CP_ACP, 0, str, p - str, ret, len );
|
||||||
ret[len] = 0;
|
ret[len] = 0;
|
||||||
|
|
||||||
|
@ -141,7 +140,7 @@ static LPWSTR SQLInstall_strdup(LPCSTR str)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0 );
|
len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0 );
|
||||||
ret = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
|
ret = malloc(len * sizeof(WCHAR));
|
||||||
MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len );
|
MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len );
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -182,7 +181,7 @@ static BOOL SQLInstall_narrow(int mode, LPSTR buffer, LPCWSTR str, WORD str_leng
|
||||||
{
|
{
|
||||||
if (len > buffer_length)
|
if (len > buffer_length)
|
||||||
{
|
{
|
||||||
pbuf = HeapAlloc(GetProcessHeap(), 0, len);
|
pbuf = malloc(len);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -212,7 +211,7 @@ static BOOL SQLInstall_narrow(int mode, LPSTR buffer, LPCWSTR str, WORD str_leng
|
||||||
}
|
}
|
||||||
if (pbuf != buffer)
|
if (pbuf != buffer)
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, pbuf);
|
free(pbuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -247,7 +246,7 @@ static HMODULE load_config_driver(const WCHAR *driver)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = HeapAlloc(GetProcessHeap(), 0, size);
|
filename = malloc(size);
|
||||||
if(!filename)
|
if(!filename)
|
||||||
{
|
{
|
||||||
RegCloseKey(hkeydriver);
|
RegCloseKey(hkeydriver);
|
||||||
|
@ -266,13 +265,13 @@ static HMODULE load_config_driver(const WCHAR *driver)
|
||||||
|
|
||||||
if(ret != ERROR_SUCCESS)
|
if(ret != ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, filename);
|
free(filename);
|
||||||
push_error(ODBC_ERROR_COMPONENT_NOT_FOUND, odbc_error_component_not_found);
|
push_error(ODBC_ERROR_COMPONENT_NOT_FOUND, odbc_error_component_not_found);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
hmod = LoadLibraryExW(filename, NULL, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
|
hmod = LoadLibraryExW(filename, NULL, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
|
||||||
HeapFree(GetProcessHeap(), 0, filename);
|
free(filename);
|
||||||
|
|
||||||
if(!hmod)
|
if(!hmod)
|
||||||
push_error(ODBC_ERROR_LOAD_LIB_FAILED, odbc_error_load_lib_failed);
|
push_error(ODBC_ERROR_LOAD_LIB_FAILED, odbc_error_load_lib_failed);
|
||||||
|
@ -295,7 +294,7 @@ static BOOL write_config_value(const WCHAR *driver, const WCHAR *args)
|
||||||
{
|
{
|
||||||
WCHAR *divider, *value;
|
WCHAR *divider, *value;
|
||||||
|
|
||||||
name = heap_alloc( (lstrlenW(args) + 1) * sizeof(WCHAR));
|
name = malloc((wcslen(args) + 1) * sizeof(WCHAR));
|
||||||
if(!name)
|
if(!name)
|
||||||
{
|
{
|
||||||
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
||||||
|
@ -317,7 +316,7 @@ static BOOL write_config_value(const WCHAR *driver, const WCHAR *args)
|
||||||
if(RegSetValueExW(hkeydriver, name, 0, REG_SZ, (BYTE*)value,
|
if(RegSetValueExW(hkeydriver, name, 0, REG_SZ, (BYTE*)value,
|
||||||
(lstrlenW(value)+1) * sizeof(WCHAR)) != ERROR_SUCCESS)
|
(lstrlenW(value)+1) * sizeof(WCHAR)) != ERROR_SUCCESS)
|
||||||
ERR("Failed to write registry installed key\n");
|
ERR("Failed to write registry installed key\n");
|
||||||
heap_free(name);
|
free(name);
|
||||||
|
|
||||||
RegCloseKey(hkeydriver);
|
RegCloseKey(hkeydriver);
|
||||||
}
|
}
|
||||||
|
@ -333,7 +332,7 @@ static BOOL write_config_value(const WCHAR *driver, const WCHAR *args)
|
||||||
fail:
|
fail:
|
||||||
RegCloseKey(hkeydriver);
|
RegCloseKey(hkeydriver);
|
||||||
RegCloseKey(hkey);
|
RegCloseKey(hkey);
|
||||||
heap_free(name);
|
free(name);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -432,7 +431,7 @@ BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR a
|
||||||
if (!mapped_request)
|
if (!mapped_request)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
driverW = heap_strdupAtoW(driver);
|
driverW = strdupAtoW(driver);
|
||||||
if (!driverW)
|
if (!driverW)
|
||||||
{
|
{
|
||||||
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
||||||
|
@ -442,7 +441,7 @@ BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR a
|
||||||
mod = load_config_driver(driverW);
|
mod = load_config_driver(driverW);
|
||||||
if (!mod)
|
if (!mod)
|
||||||
{
|
{
|
||||||
heap_free(driverW);
|
free(driverW);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -465,7 +464,7 @@ BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR a
|
||||||
attr = SQLInstall_strdup_multi(attributes);
|
attr = SQLInstall_strdup_multi(attributes);
|
||||||
if(attr)
|
if(attr)
|
||||||
ret = pConfigDSNW(hwnd, mapped_request, driverW, attr);
|
ret = pConfigDSNW(hwnd, mapped_request, driverW, attr);
|
||||||
heap_free(attr);
|
free(attr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -474,7 +473,7 @@ BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR a
|
||||||
if (!ret)
|
if (!ret)
|
||||||
push_error(ODBC_ERROR_REQUEST_FAILED, odbc_error_request_failed);
|
push_error(ODBC_ERROR_REQUEST_FAILED, odbc_error_request_failed);
|
||||||
|
|
||||||
heap_free(driverW);
|
free(driverW);
|
||||||
FreeLibrary(mod);
|
FreeLibrary(mod);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -524,7 +523,7 @@ BOOL WINAPI SQLConfigDriver(HWND hwnd, WORD request, LPCSTR driver,
|
||||||
TRACE("(%p %d %s %s %p %d %p)\n", hwnd, request, debugstr_a(driver),
|
TRACE("(%p %d %s %s %p %d %p)\n", hwnd, request, debugstr_a(driver),
|
||||||
debugstr_a(args), msg, msgmax, msgout);
|
debugstr_a(args), msg, msgmax, msgout);
|
||||||
|
|
||||||
driverW = heap_strdupAtoW(driver);
|
driverW = strdupAtoW(driver);
|
||||||
if(!driverW)
|
if(!driverW)
|
||||||
{
|
{
|
||||||
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
||||||
|
@ -533,24 +532,24 @@ BOOL WINAPI SQLConfigDriver(HWND hwnd, WORD request, LPCSTR driver,
|
||||||
if(request == ODBC_CONFIG_DRIVER)
|
if(request == ODBC_CONFIG_DRIVER)
|
||||||
{
|
{
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
WCHAR *argsW = heap_strdupAtoW(args);
|
WCHAR *argsW = strdupAtoW(args);
|
||||||
if(argsW)
|
if(argsW)
|
||||||
{
|
{
|
||||||
ret = write_config_value(driverW, argsW);
|
ret = write_config_value(driverW, argsW);
|
||||||
HeapFree(GetProcessHeap(), 0, argsW);
|
free(argsW);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, driverW);
|
free(driverW);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
hmod = load_config_driver(driverW);
|
hmod = load_config_driver(driverW);
|
||||||
HeapFree(GetProcessHeap(), 0, driverW);
|
free(driverW);
|
||||||
if(!hmod)
|
if(!hmod)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -638,7 +637,7 @@ BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
valuelen = 256;
|
valuelen = 256;
|
||||||
value = heap_alloc(valuelen * sizeof(WCHAR));
|
value = malloc(valuelen * sizeof(WCHAR));
|
||||||
|
|
||||||
size--;
|
size--;
|
||||||
|
|
||||||
|
@ -648,7 +647,7 @@ BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout)
|
||||||
res = RegEnumValueW(drivers, index, value, &len, NULL, NULL, NULL, NULL);
|
res = RegEnumValueW(drivers, index, value, &len, NULL, NULL, NULL, NULL);
|
||||||
while (res == ERROR_MORE_DATA)
|
while (res == ERROR_MORE_DATA)
|
||||||
{
|
{
|
||||||
value = heap_realloc(value, ++len * sizeof(WCHAR));
|
value = realloc(value, ++len * sizeof(WCHAR));
|
||||||
res = RegEnumValueW(drivers, index, value, &len, NULL, NULL, NULL, NULL);
|
res = RegEnumValueW(drivers, index, value, &len, NULL, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
if (res == ERROR_SUCCESS)
|
if (res == ERROR_SUCCESS)
|
||||||
|
@ -669,7 +668,7 @@ BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout)
|
||||||
|
|
||||||
buf[written++] = 0;
|
buf[written++] = 0;
|
||||||
|
|
||||||
heap_free(value);
|
free(value);
|
||||||
RegCloseKey(drivers);
|
RegCloseKey(drivers);
|
||||||
if (sizeout)
|
if (sizeout)
|
||||||
*sizeout = written;
|
*sizeout = written;
|
||||||
|
@ -690,7 +689,7 @@ BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
wbuf = heap_alloc(size * sizeof(WCHAR));
|
wbuf = malloc(size * sizeof(WCHAR));
|
||||||
if (!wbuf)
|
if (!wbuf)
|
||||||
{
|
{
|
||||||
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
||||||
|
@ -700,7 +699,7 @@ BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)
|
||||||
ret = SQLGetInstalledDriversW(wbuf, size, &written);
|
ret = SQLGetInstalledDriversW(wbuf, size, &written);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
{
|
{
|
||||||
heap_free(wbuf);
|
free(wbuf);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -708,7 +707,7 @@ BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)
|
||||||
*sizeout = WideCharToMultiByte(CP_ACP, 0, wbuf, written, NULL, 0, NULL, NULL);
|
*sizeout = WideCharToMultiByte(CP_ACP, 0, wbuf, written, NULL, 0, NULL, NULL);
|
||||||
WideCharToMultiByte(CP_ACP, 0, wbuf, written, buf, size, NULL, NULL);
|
WideCharToMultiByte(CP_ACP, 0, wbuf, written, buf, size, NULL, NULL);
|
||||||
|
|
||||||
heap_free(wbuf);
|
free(wbuf);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -825,13 +824,13 @@ int WINAPI SQLGetPrivateProfileString(LPCSTR section, LPCSTR entry,
|
||||||
if (!section || !defvalue || !buff)
|
if (!section || !defvalue || !buff)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
sectionW = heap_strdupAtoW(section);
|
sectionW = strdupAtoW(section);
|
||||||
filenameW = heap_strdupAtoW(filename);
|
filenameW = strdupAtoW(filename);
|
||||||
|
|
||||||
sectionkey = get_privateprofile_sectionkey(sectionW, filenameW);
|
sectionkey = get_privateprofile_sectionkey(sectionW, filenameW);
|
||||||
|
|
||||||
heap_free(sectionW);
|
free(sectionW);
|
||||||
heap_free(filenameW);
|
free(filenameW);
|
||||||
|
|
||||||
if (sectionkey)
|
if (sectionkey)
|
||||||
{
|
{
|
||||||
|
@ -999,7 +998,7 @@ static void write_registry_values(const WCHAR *regkey, const WCHAR *driver, cons
|
||||||
lstrcmpiW(translator, entry) == 0)
|
lstrcmpiW(translator, entry) == 0)
|
||||||
{
|
{
|
||||||
len = lstrlenW(path) + lstrlenW(slash) + lstrlenW(divider) + 1;
|
len = lstrlenW(path) + lstrlenW(slash) + lstrlenW(divider) + 1;
|
||||||
value = heap_alloc(len * sizeof(WCHAR));
|
value = malloc(len * sizeof(WCHAR));
|
||||||
if(!value)
|
if(!value)
|
||||||
{
|
{
|
||||||
ERR("Out of memory\n");
|
ERR("Out of memory\n");
|
||||||
|
@ -1013,14 +1012,14 @@ static void write_registry_values(const WCHAR *regkey, const WCHAR *driver, cons
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
len = lstrlenW(divider) + 1;
|
len = lstrlenW(divider) + 1;
|
||||||
value = heap_alloc(len * sizeof(WCHAR));
|
value = malloc(len * sizeof(WCHAR));
|
||||||
lstrcpyW(value, divider);
|
lstrcpyW(value, divider);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RegSetValueExW(hkeydriver, entry, 0, REG_SZ, (BYTE*)value,
|
if (RegSetValueExW(hkeydriver, entry, 0, REG_SZ, (BYTE*)value,
|
||||||
(lstrlenW(value)+1)*sizeof(WCHAR)) != ERROR_SUCCESS)
|
(lstrlenW(value)+1)*sizeof(WCHAR)) != ERROR_SUCCESS)
|
||||||
ERR("Failed to write registry data %s %s\n", debugstr_w(entry), debugstr_w(value));
|
ERR("Failed to write registry data %s %s\n", debugstr_w(entry), debugstr_w(value));
|
||||||
heap_free(value);
|
free(value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1110,8 +1109,8 @@ BOOL WINAPI SQLInstallDriverEx(LPCSTR lpszDriver, LPCSTR lpszPathIn,
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
HeapFree(GetProcessHeap(), 0, driver);
|
free(driver);
|
||||||
HeapFree(GetProcessHeap(), 0, pathin);
|
free(pathin);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1266,7 +1265,7 @@ SQLRETURN WINAPI SQLInstallerError(WORD iError, DWORD *pfErrorCode,
|
||||||
wbuf = 0;
|
wbuf = 0;
|
||||||
if (lpszErrorMsg && cbErrorMsgMax)
|
if (lpszErrorMsg && cbErrorMsgMax)
|
||||||
{
|
{
|
||||||
wbuf = HeapAlloc(GetProcessHeap(), 0, cbErrorMsgMax*sizeof(WCHAR));
|
wbuf = malloc(cbErrorMsgMax * sizeof(WCHAR));
|
||||||
if (!wbuf)
|
if (!wbuf)
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -1275,7 +1274,7 @@ SQLRETURN WINAPI SQLInstallerError(WORD iError, DWORD *pfErrorCode,
|
||||||
{
|
{
|
||||||
WORD cbBuf = 0;
|
WORD cbBuf = 0;
|
||||||
SQLInstall_narrow(1, lpszErrorMsg, wbuf, cbwbuf+1, cbErrorMsgMax, &cbBuf);
|
SQLInstall_narrow(1, lpszErrorMsg, wbuf, cbwbuf+1, cbErrorMsgMax, &cbBuf);
|
||||||
HeapFree(GetProcessHeap(), 0, wbuf);
|
free(wbuf);
|
||||||
if (pcbErrorMsg)
|
if (pcbErrorMsg)
|
||||||
*pcbErrorMsg = cbBuf-1;
|
*pcbErrorMsg = cbBuf-1;
|
||||||
}
|
}
|
||||||
|
@ -1352,8 +1351,8 @@ BOOL WINAPI SQLInstallTranslatorEx(LPCSTR lpszTranslator, LPCSTR lpszPathIn,
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
HeapFree(GetProcessHeap(), 0, translator);
|
free(translator);
|
||||||
HeapFree(GetProcessHeap(), 0, pathin);
|
free(pathin);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1509,7 +1508,7 @@ BOOL WINAPI SQLRemoveDriver(LPCSTR lpszDriver, BOOL fRemoveDSN,
|
||||||
|
|
||||||
ret = SQLRemoveDriverW(driver, fRemoveDSN, lpdwUsageCount);
|
ret = SQLRemoveDriverW(driver, fRemoveDSN, lpdwUsageCount);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, driver);
|
free(driver);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1559,7 +1558,7 @@ BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR lpszDSN)
|
||||||
else
|
else
|
||||||
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
||||||
|
|
||||||
heap_free(dsn);
|
free(dsn);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1640,7 +1639,7 @@ BOOL WINAPI SQLRemoveTranslator(LPCSTR lpszTranslator, LPDWORD lpdwUsageCount)
|
||||||
translator = SQLInstall_strdup(lpszTranslator);
|
translator = SQLInstall_strdup(lpszTranslator);
|
||||||
ret = SQLRemoveTranslatorW(translator, lpdwUsageCount);
|
ret = SQLRemoveTranslatorW(translator, lpdwUsageCount);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, translator);
|
free(translator);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1759,8 +1758,8 @@ BOOL WINAPI SQLWriteDSNToIni(LPCSTR lpszDSN, LPCSTR lpszDriver)
|
||||||
else
|
else
|
||||||
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
|
||||||
|
|
||||||
heap_free(dsn);
|
free(dsn);
|
||||||
heap_free(driver);
|
free(driver);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1836,17 +1835,17 @@ BOOL WINAPI SQLWritePrivateProfileString(LPCSTR lpszSection, LPCSTR lpszEntry,
|
||||||
clear_errors();
|
clear_errors();
|
||||||
TRACE("%s %s %s %s\n", lpszSection, lpszEntry, lpszString, lpszFilename);
|
TRACE("%s %s %s %s\n", lpszSection, lpszEntry, lpszString, lpszFilename);
|
||||||
|
|
||||||
sect = heap_strdupAtoW(lpszSection);
|
sect = strdupAtoW(lpszSection);
|
||||||
entry = heap_strdupAtoW(lpszEntry);
|
entry = strdupAtoW(lpszEntry);
|
||||||
string = heap_strdupAtoW(lpszString);
|
string = strdupAtoW(lpszString);
|
||||||
file = heap_strdupAtoW(lpszFilename);
|
file = strdupAtoW(lpszFilename);
|
||||||
|
|
||||||
ret = SQLWritePrivateProfileStringW(sect, entry, string, file);
|
ret = SQLWritePrivateProfileStringW(sect, entry, string, file);
|
||||||
|
|
||||||
heap_free(sect);
|
free(sect);
|
||||||
heap_free(entry);
|
free(entry);
|
||||||
heap_free(string);
|
free(string);
|
||||||
heap_free(file);
|
free(file);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue