diff --git a/doc/xml/release.xml b/doc/xml/release.xml index f859d5ab4..4d730ea17 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -32,6 +32,14 @@

Add uint64 variant type and supporting conversion functions.

+ + + + + + +

Add iniSectionList() to Ini object and remove dead code.

+
diff --git a/src/common/ini.c b/src/common/ini.c index 2b621e9e7..d614a1159 100644 --- a/src/common/ini.c +++ b/src/common/ini.c @@ -18,11 +18,10 @@ struct Ini { MemContext *memContext; // Context that contains the ini KeyValue *store; // Key value store that contains the ini data - String *fileName; // File name (if one has been set) }; /*********************************************************************************************************************************** -Create a new string from a zero-terminated string +Create a new Ini object ***********************************************************************************************************************************/ Ini * iniNew() @@ -99,8 +98,6 @@ iniGet(const Ini *this, const String *section, const String *key) if (result == NULL) THROW_FMT(FormatError, "section '%s', key '%s' does not exist", strPtr(section), strPtr(key)); - return result; - FUNCTION_TEST_RESULT(CONST_VARIANT, result); } @@ -152,7 +149,7 @@ iniSectionKeyList(const Ini *this, const String *section) // Get the section KeyValue *sectionKv = varKv(kvGet(this->store, varNewStr(section))); - // Return key list of the section exists + // Return key list if the section exists if (sectionKv != NULL) result = strLstNewVarLst(kvKeyList(sectionKv)); // Otherwise return an empty list @@ -166,6 +163,32 @@ iniSectionKeyList(const Ini *this, const String *section) FUNCTION_TEST_RESULT(STRING_LIST, result); } +/*********************************************************************************************************************************** +Get a list of sections +***********************************************************************************************************************************/ +StringList * +iniSectionList(const Ini *this) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(INI, this); + + FUNCTION_TEST_ASSERT(this != NULL); + FUNCTION_TEST_END(); + + StringList *result = NULL; + + MEM_CONTEXT_TEMP_BEGIN() + { + // Get the sections from the keyList + result = strLstNewVarLst(kvKeyList(this->store)); + + strLstMove(result, MEM_CONTEXT_OLD()); + } + MEM_CONTEXT_TEMP_END(); + + FUNCTION_TEST_RESULT(STRING_LIST, result); +} + /*********************************************************************************************************************************** Parse ini from a string ***********************************************************************************************************************************/ @@ -248,36 +271,6 @@ iniParse(Ini *this, const String *content) FUNCTION_TEST_RESULT_VOID(); } -/*********************************************************************************************************************************** -Load ini from a file -***********************************************************************************************************************************/ -void -iniLoad(Ini *this, const String *fileName) -{ - FUNCTION_TEST_BEGIN(); - FUNCTION_TEST_PARAM(INI, this); - FUNCTION_TEST_PARAM(STRING, fileName); - - FUNCTION_TEST_ASSERT(this != NULL); - FUNCTION_TEST_ASSERT(fileName != NULL); - FUNCTION_TEST_END(); - - MEM_CONTEXT_BEGIN(this->memContext) - { - // Set the filename - this->fileName = strDup(fileName); - - MEM_CONTEXT_TEMP_BEGIN() - { - iniParse(this, strNewBuf(storageGetNP(storageNewReadNP(storageLocal(), this->fileName)))); - } - MEM_CONTEXT_TEMP_END(); - } - MEM_CONTEXT_END() - - FUNCTION_TEST_RESULT_VOID(); -} - /*********************************************************************************************************************************** Set an ini value ***********************************************************************************************************************************/ diff --git a/src/common/ini.h b/src/common/ini.h index 42ea932e4..f5f3a2ef0 100644 --- a/src/common/ini.h +++ b/src/common/ini.h @@ -18,11 +18,12 @@ Ini *iniNew(); const Variant *iniGet(const Ini *this, const String *section, const String *key); const Variant *iniGetDefault(const Ini *this, const String *section, const String *key, Variant *defaultValue); StringList *iniSectionKeyList(const Ini *this, const String *section); +StringList *iniSectionList(const Ini *this); void iniParse(Ini *this, const String *content); -void iniLoad(Ini *this, const String *fileName); void iniSet(Ini *this, const String *section, const String *key, const Variant *value); - void iniFree(Ini *this); +String *iniFileName(const Ini *this); +bool iniFileExists(const Ini *this); /*********************************************************************************************************************************** Macros for function logging diff --git a/test/src/module/common/iniTest.c b/test/src/module/common/iniTest.c index 36b1ed224..24fc942ae 100644 --- a/test/src/module/common/iniTest.c +++ b/test/src/module/common/iniTest.c @@ -23,7 +23,7 @@ testRun() } // ***************************************************************************************************************************** - if (testBegin("iniSet(), iniGet(), iniGetDefault(), and iniSectionKeyList()")) + if (testBegin("iniSet(), iniGet(), iniGetDefault(), iniSectionList(), and iniSectionKeyList()")) { Ini *ini = NULL; @@ -44,11 +44,15 @@ testRun() TEST_RESULT_INT(strLstSize(iniSectionKeyList(ini, strNew("bogus"))), 0, "get keys for missing section"); TEST_RESULT_STR(strPtr(strLstJoin(iniSectionKeyList(ini, strNew("section1")), "|")), "key1|key2", "get keys for section"); + TEST_RESULT_VOID(iniSet(ini, strNew("section2"), strNew("key2"), varNewInt(2)), "set section2, key, int"); + TEST_RESULT_INT(strLstSize(iniSectionList(ini)), 2, "number of sections"); + TEST_RESULT_STR(strPtr(strLstJoin(iniSectionList(ini), "|")), "section1|section2", "get sections"); + TEST_RESULT_VOID(iniFree(ini), "free ini"); } // ***************************************************************************************************************************** - if (testBegin("iniParse() and iniLoad()")) + if (testBegin("iniParse()")) { Ini *ini = NULL; String *content = NULL; @@ -66,6 +70,7 @@ testRun() content = strNew ( + "# Comment\n" "[global] \n" "compress=y \n" "\n" @@ -77,27 +82,6 @@ testRun() TEST_RESULT_STR(strPtr(varStr(iniGet(ini, strNew("global"), strNew("compress")))), "y", "get compress"); TEST_RESULT_STR(strPtr(varStr(iniGet(ini, strNew("db"), strNew("pg1-path")))), "/path/to/pg", "get pg1-path"); - - // ------------------------------------------------------------------------------------------------------------------------- - TEST_ASSIGN(ini, iniNew(), "new ini"); - String *fileName = strNewFmt("%s/test.ini", testPath()); - - content = strNew - ( - "# Comment\n" - " [global]\n" - " \n" - " compress= y \n" - "[db]\t\r\n" - " pg1-path =/path/to/pg\n" - "\n" - ); - - TEST_RESULT_VOID(storagePutNP(storageNewWriteNP(storageLocalWrite(), fileName), bufNewStr(content)), "put ini to file"); - TEST_RESULT_VOID(iniLoad(ini, fileName), "load ini from file"); - - TEST_RESULT_STR(strPtr(varStr(iniGet(ini, strNew("global"), strNew("compress")))), "y", "get compress"); - TEST_RESULT_STR(strPtr(varStr(iniGet(ini, strNew("db"), strNew("pg1-path")))), "/path/to/pg", "get pg1-path"); } FUNCTION_HARNESS_RESULT_VOID();