Evil: use static buffer to store error messages

Reviewers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D5394
This commit is contained in:
Vincent Torri 2017-12-11 15:06:02 +09:00 committed by Jean-Philippe Andre
parent 196b6f1ba4
commit 771bb6e6a7
12 changed files with 89 additions and 159 deletions

View File

@ -64,11 +64,7 @@ _ecore_exe_close_cb(void *data,
/* FIXME : manage the STILL_ACTIVE returned error */
if (!GetExitCodeProcess(exe->process, &exit_code))
{
char *msg = evil_last_error_get();
DBG("%s", msg);
free(msg);
}
DBG("%s", evil_last_error_get());
e->exit_code = exit_code;
e->exited = 1;
@ -498,16 +494,8 @@ _impl_ecore_exe_efl_object_finalize(Eo *obj, Ecore_Exe_Data *exe)
if (!CreateProcess(shell, exe_cmd_buf, NULL, NULL, EINA_TRUE,
run_pri | CREATE_SUSPENDED, NULL, NULL, &si, &pi))
{
char *msg;
msg = evil_last_error_get();
if (msg)
{
WRN("Failed to create process %s: %s", exe_cmd_buf, msg);
free(msg);
}
else
WRN("Failed to create process %s: %ld", exe_cmd_buf, GetLastError());
WRN("Failed to create process %s: %s",
exe_cmd_buf, evil_last_error_get());
goto error;
}

View File

@ -2594,13 +2594,7 @@ _ecore_main_win32_objects_wait(DWORD objects_nbr,
{
ERR("Error when waiting threads.");
if (result == WAIT_FAILED)
{
char *str;
str = evil_last_error_get();
ERR("%s", str);
free(str);
}
ERR("%s", evil_last_error_get());
goto close_thread;
}
@ -2755,11 +2749,7 @@ _ecore_main_win32_select(int nfds EINA_UNUSED,
/* The result tells us the type of event we have. */
if (result == WAIT_FAILED)
{
char *m;
m = evil_last_error_get();
WRN("%s", m);
free(m);
WRN("%s", evil_last_error_get());
res = -1;
}
else if (result == WAIT_TIMEOUT)

View File

@ -64,14 +64,7 @@ _ecore_con_local_win32_server_read_client_handler(void *data, Ecore_Win32_Handle
if (broken_pipe)
{
#if 0
char *msg;
msg = evil_last_error_get();
if (msg)
{
ecore_con_event_client_error(cl, msg);
free(msg);
}
ecore_con_event_client_error(cl, evil_last_error_get());
#endif
_ecore_con_client_kill(obj);
return ECORE_CALLBACK_CANCEL;
@ -99,12 +92,7 @@ _ecore_con_local_win32_server_peek_client_handler(void *data, Ecore_Win32_Handle
return ECORE_CALLBACK_RENEW;
#if 0
msg = evil_last_error_get();
if (msg)
{
ecore_con_event_server_error(host_svr, msg);
free(msg);
}
ecore_con_event_server_error(host_svr, evil_last_error_get());
#endif
_ecore_con_server_kill(cl->host_server);
return ECORE_CALLBACK_CANCEL;
@ -126,12 +114,7 @@ _ecore_con_local_win32_client_peek_server_handler(void *data, Ecore_Win32_Handle
if (!ResetEvent(svr->event_peek))
return ECORE_CALLBACK_RENEW;
#if 0
msg = evil_last_error_get();
if (msg)
{
ecore_con_event_server_error(svr, msg);
free(msg);
}
ecore_con_event_server_error(svr, evil_last_error_get());
#endif
_ecore_con_server_kill(obj);
return ECORE_CALLBACK_CANCEL;
@ -172,14 +155,7 @@ _ecore_con_local_win32_client_read_server_handler(void *data, Ecore_Win32_Handle
if (broken_pipe)
{
#if 0
char *msg;
msg = evil_last_error_get();
if (msg)
{
ecore_con_event_server_error(svr, msg);
free(msg);
}
ecore_con_event_server_error(svr, evil_last_error_get());
#endif
_ecore_con_server_kill(obj);
return ECORE_CALLBACK_CANCEL;
@ -686,14 +662,7 @@ ecore_con_local_win32_server_flush(Ecore_Con_Server *obj)
res = WriteFile(svr->pipe, eina_binbuf_string_get(svr->buf) + svr->write_buf_offset, num, &written, NULL);
if (!res)
{
char *msg;
msg = evil_last_error_get();
if (msg)
{
ecore_con_event_server_error(obj, msg);
free(msg);
}
ecore_con_event_server_error(obj, evil_last_error_get());
_ecore_con_server_kill(obj);
}
@ -737,14 +706,7 @@ ecore_con_local_win32_client_flush(Ecore_Con_Client *obj)
res = WriteFile(svr->pipe, eina_binbuf_string_get(cl->buf) + cl->buf_offset, num, &written, NULL);
if (!res)
{
char *msg;
msg = evil_last_error_get();
if (msg)
{
ecore_con_event_client_error(obj, msg);
free(msg);
}
ecore_con_event_client_error(obj, evil_last_error_get());
_ecore_con_client_kill(obj);
}

View File

@ -66,9 +66,8 @@ _efl_net_dialer_windows_efl_net_dialer_dial(Eo *o, Efl_Net_Dialer_Windows_Data *
case ERROR_INVALID_NAME: return EADDRNOTAVAIL;
default:
{
char *msg = evil_format_message(win32err);
ERR("CreateFile(%s): Unexpected win32err=%lu (%s)", pd->address_dial, win32err, msg);
free(msg);
ERR("CreateFile(%s): Unexpected win32err=%lu (%s)",
pd->address_dial, win32err, evil_format_message(win32err));
return EINVAL;
}
}
@ -85,9 +84,8 @@ _efl_net_dialer_windows_efl_net_dialer_dial(Eo *o, Efl_Net_Dialer_Windows_Data *
snprintf(cstr, sizeof(cstr), "%s:%lu", address, cpid);
else
{
char *msg = evil_last_error_get();
WRN("server=%p (%s) could not GetNamedPipeClientProcessId(o): %s", o, address, msg);
free(msg);
WRN("server=%p (%s) could not GetNamedPipeClientProcessId(o): %s",
o, address, evil_last_error_get());
eina_strlcpy(cstr, address, sizeof(cstr));
}
@ -95,9 +93,8 @@ _efl_net_dialer_windows_efl_net_dialer_dial(Eo *o, Efl_Net_Dialer_Windows_Data *
snprintf(sstr, sizeof(sstr), "%s:%lu", address, spid);
else
{
char *msg = evil_last_error_get();
WRN("server=%p (%s) could not GetNamedPipeServerProcessId(o): %s", o, address, msg);
free(msg);
WRN("server=%p (%s) could not GetNamedPipeServerProcessId(o): %s",
o, address, evil_last_error_get());
eina_strlcpy(sstr, address, sizeof(sstr));
}

View File

@ -61,9 +61,8 @@ _efl_net_server_windows_client_listen_success(void *data, Eo *client, DWORD used
snprintf(cstr, sizeof(cstr), "%s:%lu", addr, cpid);
else
{
char *msg = evil_last_error_get();
WRN("server=%p (%s) could not GetNamedPipeClientProcessId(client): %s", o, addr, msg);
free(msg);
WRN("server=%p (%s) could not GetNamedPipeClientProcessId(client): %s",
o, addr, evil_last_error_get());
eina_strlcpy(cstr, addr, sizeof(cstr));
}
@ -71,9 +70,8 @@ _efl_net_server_windows_client_listen_success(void *data, Eo *client, DWORD used
snprintf(sstr, sizeof(sstr), "%s:%lu", addr, spid);
else
{
char *msg = evil_last_error_get();
WRN("server=%p (%s) could not GetNamedPipeServerProcessId(client): %s", o, addr, msg);
free(msg);
WRN("server=%p (%s) could not GetNamedPipeServerProcessId(client): %s",
o, addr, evil_last_error_get());
eina_strlcpy(sstr, addr, sizeof(sstr));
}
@ -225,8 +223,8 @@ _efl_net_server_windows_client_new(Eo *o, Efl_Net_Server_Windows_Data *pd)
case ERROR_INVALID_PARAMETER: return EINVAL;
default:
{
char *msg = evil_format_message(win32err);
ERR("Unexpected win32err=%lu (%s)", win32err, msg);
ERR("Unexpected win32err=%lu (%s)",
win32err, evil_format_message(win32err));
return EINVAL;
}
}

View File

@ -737,16 +737,9 @@ eina_file_open(const char *path, Eina_Bool shared)
if (handle == INVALID_HANDLE_VALUE)
{
char *msg;
msg = evil_last_error_get();
if (msg)
{
WRN("eina_file_open() failed with file %s: %s", filename, msg);
free(msg);
}
else
goto free_file;
WRN("eina_file_open() failed with file %s: %s",
filename, evil_last_error_get());
goto free_file;
}
if (!GetFileAttributesEx(filename, GetFileExInfoStandard, &fad))

View File

@ -191,14 +191,7 @@ _eio_monitor_win32_cb(void *data, Ecore_Win32_Handler *wh EINA_UNUSED)
&w->overlapped,
NULL))
{
char *msg;
msg = evil_last_error_get();
if (msg)
{
ERR("%s", msg);
free(msg);
}
ERR("%s", evil_last_error_get());
return ECORE_CALLBACK_CANCEL;
}
@ -271,14 +264,7 @@ _eio_monitor_win32_watcher_new(Eio_Monitor *monitor,
&w->overlapped,
NULL))
{
char *msg;
msg = evil_last_error_get();
if (msg)
{
ERR("%s", msg);
free(msg);
}
ERR("%s", evil_last_error_get());
goto close_event;
}

View File

@ -24,7 +24,7 @@ static int _dl_err_viewed = 0;
static void
_dl_get_last_error(char *desc)
{
char *str;
const char *str;
size_t l1;
size_t l2;
@ -45,7 +45,6 @@ _dl_get_last_error(char *desc)
memcpy(_dl_err + l1, str, l2);
_dl_err[l1 + l2] = '\0';
}
free(str);
_dl_err_viewed = 0;
}

View File

@ -22,6 +22,8 @@ extern LONGLONG _evil_time_freq;
extern LONGLONG _evil_time_count;
extern long _evil_time_second;
extern DWORD _evil_tls_index;
long _evil_systemtime_to_time(SYSTEMTIME st);
int
@ -96,3 +98,41 @@ evil_shutdown(void)
return _evil_init_count;
}
BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved)
{
LPVOID data;
switch (reason)
{
case DLL_PROCESS_ATTACH:
_evil_tls_index = TlsAlloc();
if (_evil_tls_index == TLS_OUT_OF_INDEXES)
return FALSE;
case DLL_THREAD_ATTACH:
data = (LPVOID)LocalAlloc(LPTR, 4096);
if (!data)
return FALSE;
if (!TlsSetValue(_evil_tls_index, data))
return FALSE;
break;
case DLL_THREAD_DETACH:
data = TlsGetValue(_evil_tls_index);
if (data)
LocalFree((HLOCAL)data);
break;
case DLL_PROCESS_DETACH:
data = TlsGetValue(_evil_tls_index);
if (data)
LocalFree((HLOCAL)data);
TlsFree(_evil_tls_index);
break;
default:
break;
}
return TRUE;
(void)inst;
(void)reserved;
}

View File

@ -83,12 +83,8 @@ mmap(void *addr EVIL_UNUSED,
fm = CreateFileMapping(handle, NULL, protect, 0, 0, NULL);
if (!fm)
{
char *str;
str = evil_last_error_get();
fprintf(stderr, "[Evil] [mmap] CreateFileMapping failed: %s\n", str);
free(str);
fprintf(stderr, "[Evil] [mmap] CreateFileMapping failed: %s\n",
evil_last_error_get());
return MAP_FAILED;
}
@ -117,12 +113,8 @@ mmap(void *addr EVIL_UNUSED,
if (!data)
{
char *str;
str = evil_last_error_get();
fprintf(stderr, "[Evil] [mmap] MapViewOfFile failed: %s\n", str);
free(str);
fprintf(stderr, "[Evil] [mmap] MapViewOfFile failed: %s\n",
evil_last_error_get());
return MAP_FAILED;
}
@ -137,13 +129,8 @@ munmap(void *addr,
res = UnmapViewOfFile(addr);
if (!res)
{
char *str;
str = evil_last_error_get();
fprintf(stderr, "[Evil] [munmap] UnmapViewOfFile failed: %s\n", str);
free(str);
}
fprintf(stderr, "[Evil] [munmap] UnmapViewOfFile failed: %s\n",
evil_last_error_get());
return (res == 0) ? -1 : 0;
}

View File

@ -17,6 +17,7 @@
#include "evil_macro.h"
#include "evil_util.h"
DWORD _evil_tls_index;
/* static void _evil_error_display(const char *fct, LONG res); */
static void _evil_last_error_display(const char *fct);
@ -113,12 +114,12 @@ evil_utf16_to_utf8(const wchar_t *text16)
return text8;
}
char *
const char *
evil_format_message(long err)
{
char *buf;
LPTSTR msg;
char *str;
char *disp;
if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
@ -128,10 +129,10 @@ evil_format_message(long err)
0,
NULL))
{
char buf[4096];
snprintf(buf, 4096, "FormatMessage failed with error %ld\n", GetLastError());
return strdup(buf);
buf = (char *)TlsGetValue(_evil_tls_index);
snprintf(buf, 4096,
"FormatMessage failed with error %ld\n", GetLastError());
return (const char *)buf;
}
#ifdef UNICODE
@ -140,15 +141,8 @@ evil_format_message(long err)
str = msg;
#endif /* UNICODE */
disp = (char *)malloc((strlen(str) + strlen("(00000) ") + 1) * sizeof(char));
if (!disp)
{
LocalFree(msg);
return NULL;
}
snprintf(disp, strlen(str) + strlen("(00000) ") + 1,
"(%5ld) %s", err, str);
buf = (char *)TlsGetValue(_evil_tls_index);
snprintf(buf, 4096, "(%5ld) %s", err, str);
#ifdef UNICODE
free(str);
@ -156,10 +150,10 @@ evil_format_message(long err)
LocalFree(msg);
return disp;
return (const char *)buf;
}
char *
const char *
evil_last_error_get(void)
{
DWORD err;
@ -171,11 +165,7 @@ evil_last_error_get(void)
static void
_evil_last_error_display(const char *fct)
{
char *error;
error = evil_last_error_get();
fprintf(stderr, "[Evil] [%s] ERROR: %s\n", fct, error);
free(error);
fprintf(stderr, "[Evil] [%s] ERROR: %s\n", fct, evil_last_error_get());
}

View File

@ -59,9 +59,9 @@ EAPI char *evil_wchar_to_char(const wchar_t *text);
*/
EAPI char *evil_utf16_to_utf8(const wchar_t *text);
EAPI char *evil_format_message(long err);
EAPI const char *evil_format_message(long err);
EAPI char *evil_last_error_get(void);
EAPI const char *evil_last_error_get(void);
/**
* @brief Return a dir to store temporary files.