const char * c_getenv(const char *variable) { c_utf16_t *var, *buffer; char *val = NULL; int32_t buffer_size = 1024; int32_t retval; var = u8to16(variable); buffer = c_malloc(buffer_size * sizeof(c_utf16_t)); retval = GetEnvironmentVariableW(var, buffer, buffer_size); if (retval != 0) { if (retval > buffer_size) { c_free(buffer); buffer_size = retval; buffer = c_malloc(buffer_size * sizeof(c_utf16_t)); retval = GetEnvironmentVariableW(var, buffer, buffer_size); } val = u16to8(buffer); } else { if (GetLastError() != ERROR_ENVVAR_NOT_FOUND) { val = c_malloc(1); *val = 0; } } c_free(var); c_free(buffer); return val; }
const gchar * g_module_error (void) { gchar* ret = NULL; TCHAR* buf = NULL; DWORD code = GetLastError (); FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, 0, NULL); ret = u16to8 (buf); LocalFree(buf); return ret; }