odbccp32: Use CRT allocation functions.

This commit is contained in:
Alex Henrie 2023-08-16 21:49:52 -06:00 committed by Alexandre Julliard
parent 81a5a8f46b
commit 79e78218ec

View file

@ -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;
} }