mirror of https://github.com/FreeRDP/FreeRDP
libwinpr-utils: fix .ini parser whitespace trimming
This commit is contained in:
parent
43031d6b66
commit
64b550e18f
|
@ -241,9 +241,9 @@ int IniFile_Load(wIniFile* ini)
|
|||
{
|
||||
separator = strchr(line, '=');
|
||||
|
||||
end = separator - 1;
|
||||
end = separator;
|
||||
|
||||
while ((end > line) && ((end[-1] == ' ') || (end[-1] == '\t')))
|
||||
while ((&end[-1] > line) && ((end[-1] == ' ') || (end[-1] == '\t')))
|
||||
end--;
|
||||
|
||||
*end = '\0';
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include <winpr/ini.h>
|
||||
|
||||
const char TEST_INI_FILE[] =
|
||||
const char TEST_INI_01[] =
|
||||
"; This is a sample .ini config file\n"
|
||||
"\n"
|
||||
"[first_section]\n"
|
||||
|
@ -16,6 +16,17 @@ const char TEST_INI_FILE[] =
|
|||
"URL = \"http://www.example.com/~username\"\n"
|
||||
"\n";
|
||||
|
||||
const char TEST_INI_02[] =
|
||||
"[FreeRDS]\n"
|
||||
"prefix=\"/usr/local\"\n"
|
||||
"bindir=\"bin\"\n"
|
||||
"sbindir=\"sbin\"\n"
|
||||
"libdir=\"lib\"\n"
|
||||
"datarootdir=\"share\"\n"
|
||||
"localstatedir=\"var\"\n"
|
||||
"sysconfdir=\"etc\"\n"
|
||||
"\n";
|
||||
|
||||
int TestIni(int argc, char* argv[])
|
||||
{
|
||||
int i, j;
|
||||
|
@ -27,9 +38,11 @@ int TestIni(int argc, char* argv[])
|
|||
char** keyNames;
|
||||
char** sectionNames;
|
||||
|
||||
/* First Sample */
|
||||
|
||||
ini = IniFile_New();
|
||||
|
||||
IniFile_ParseString(ini, TEST_INI_FILE);
|
||||
IniFile_ParseString(ini, TEST_INI_01);
|
||||
|
||||
sectionNames = IniFile_GetSectionNames(ini, &nSections);
|
||||
|
||||
|
@ -92,6 +105,33 @@ int TestIni(int argc, char* argv[])
|
|||
|
||||
IniFile_Free(ini);
|
||||
|
||||
/* Second Sample */
|
||||
|
||||
ini = IniFile_New();
|
||||
|
||||
IniFile_ParseString(ini, TEST_INI_02);
|
||||
|
||||
sectionNames = IniFile_GetSectionNames(ini, &nSections);
|
||||
|
||||
for (i = 0; i < nSections; i++)
|
||||
{
|
||||
keyNames = IniFile_GetSectionKeyNames(ini, sectionNames[i], &nKeys);
|
||||
|
||||
printf("[%s]\n", sectionNames[i]);
|
||||
|
||||
for (j = 0; j < nKeys; j++)
|
||||
{
|
||||
sValue = IniFile_GetKeyValueString(ini, sectionNames[i], keyNames[j]);
|
||||
printf("%s = %s\n", keyNames[j], sValue);
|
||||
}
|
||||
|
||||
free(keyNames);
|
||||
}
|
||||
|
||||
free(sectionNames);
|
||||
|
||||
IniFile_Free(ini);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#endif
|
||||
|
||||
#include <winpr/crt.h>
|
||||
#include <winpr/ini.h>
|
||||
#include <winpr/path.h>
|
||||
#include <winpr/synch.h>
|
||||
#include <winpr/library.h>
|
||||
#include <winpr/environment.h>
|
||||
|
@ -395,17 +397,12 @@ BOOL WTSRegisterWtsApiFunctionTable(PWtsApiFunctionTable table)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void InitializeWtsApiStubs(void)
|
||||
void InitializeWtsApiStubs_Env()
|
||||
{
|
||||
DWORD nSize;
|
||||
char* env = NULL;
|
||||
INIT_WTSAPI_FN pInitWtsApi;
|
||||
|
||||
if (g_Initialized)
|
||||
return;
|
||||
|
||||
g_Initialized = TRUE;
|
||||
|
||||
if (g_WtsApi)
|
||||
return;
|
||||
|
||||
|
@ -430,3 +427,69 @@ void InitializeWtsApiStubs(void)
|
|||
g_WtsApi = pInitWtsApi();
|
||||
}
|
||||
}
|
||||
|
||||
void InitializeWtsApiStubs_FreeRDS()
|
||||
{
|
||||
char* prefix;
|
||||
char* libdir;
|
||||
wIniFile* ini;
|
||||
|
||||
if (g_WtsApi)
|
||||
return;
|
||||
|
||||
ini = IniFile_New();
|
||||
|
||||
if (IniFile_Parse(ini, "/var/run/freerds.instance") < 0)
|
||||
{
|
||||
printf("failed to parse freerds.instance\n");
|
||||
}
|
||||
|
||||
prefix = IniFile_GetKeyValueString(ini, "FreeRDS", "prefix");
|
||||
libdir = IniFile_GetKeyValueString(ini, "FreeRDS", "libdir");
|
||||
|
||||
printf("FreeRDS: %s / %s\n", prefix, libdir);
|
||||
|
||||
if (prefix && libdir)
|
||||
{
|
||||
char* prefix_libdir;
|
||||
char* wtsapi_library;
|
||||
|
||||
prefix_libdir = GetCombinedPath(prefix, libdir);
|
||||
wtsapi_library = GetCombinedPath(prefix_libdir, "libfreerds-fdsapi.so");
|
||||
|
||||
if (wtsapi_library)
|
||||
{
|
||||
INIT_WTSAPI_FN pInitWtsApi;
|
||||
|
||||
g_WtsApiModule = LoadLibraryA(wtsapi_library);
|
||||
|
||||
if (g_WtsApiModule)
|
||||
{
|
||||
pInitWtsApi = (INIT_WTSAPI_FN) GetProcAddress(g_WtsApiModule, "InitWtsApi");
|
||||
|
||||
if (pInitWtsApi)
|
||||
{
|
||||
g_WtsApi = pInitWtsApi();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(prefix_libdir);
|
||||
free(wtsapi_library);
|
||||
}
|
||||
|
||||
IniFile_Free(ini);
|
||||
}
|
||||
|
||||
void InitializeWtsApiStubs(void)
|
||||
{
|
||||
if (g_Initialized)
|
||||
return;
|
||||
|
||||
g_Initialized = TRUE;
|
||||
|
||||
InitializeWtsApiStubs_Env();
|
||||
|
||||
if (!g_WtsApi)
|
||||
InitializeWtsApiStubs_FreeRDS();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue