/* 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;
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;
}
{
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;
}
/* 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)
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;
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;
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;
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;
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);
}
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);
}
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;
}
}
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));
}
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));
}
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));
}
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));
}
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;
}
}
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))
&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;
}
&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;
}
static void
_dl_get_last_error(char *desc)
{
- char *str;
+ const char *str;
size_t l1;
size_t l2;
memcpy(_dl_err + l1, str, l2);
_dl_err[l1 + l2] = '\0';
}
- free(str);
_dl_err_viewed = 0;
}
extern LONGLONG _evil_time_count;
extern long _evil_time_second;
+extern DWORD _evil_tls_index;
+
long _evil_systemtime_to_time(SYSTEMTIME st);
int
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;
+}
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;
}
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;
}
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;
}
#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);
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,
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
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);
LocalFree(msg);
- return disp;
+ return (const char *)buf;
}
-char *
+const char *
evil_last_error_get(void)
{
DWORD err;
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());
}
*/
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.