|
|
- #pragma once
-
- #pragma warning( disable : 4267 6387 )
-
- #include <windows.h>
- #include "crt.h"
-
- inline size_t get_module_path(HMODULE module, wchar_t **result, size_t *size, size_t free_space)
- {
- size_t i = 0;
- size_t len, s;
- *result = NULL;
- do
- {
- if (*result != NULL)
- memfree(*result);
- i++;
- s = i * MAX_PATH + 1;
- *result = memalloc(sizeof(wchar_t) * s);
- len = GetModuleFileNameW(module, *result, s);
- }
- while (GetLastError() == ERROR_INSUFFICIENT_BUFFER && s - len >= free_space);
-
- if (size != NULL)
- *size = s;
- return len;
- }
-
- inline wchar_t *get_ini_entry(const wchar_t *config_file, const wchar_t *section, const wchar_t *key,
- const wchar_t *default_val)
- {
- size_t i = 0;
- size_t size, read;
- wchar_t *result = NULL;
- do
- {
- if (result != NULL)
- memfree(result);
- i++;
- size = i * MAX_PATH + 1;
- result = memalloc(sizeof(wchar_t) * size);
- read = GetPrivateProfileStringW(section, key, default_val, result, size, config_file);
- }
- while (read == size - 1);
- return result;
- }
-
- inline wchar_t *get_file_name_no_ext(wchar_t *str, size_t len)
- {
- size_t ext_index = len;
- size_t i;
- for (i = len; i > 0; i--)
- {
- wchar_t c = *(str + i);
- if (c == L'.' && ext_index == len)
- ext_index = i;
- else if (c == L'\\')
- break;
- }
-
- size_t result_len = ext_index - i;
- wchar_t *result = memcalloc(sizeof(wchar_t) * result_len);
- wmemcpy(result, str + i + 1, result_len - 1);
- return result;
- }
|