refactoring: simplify strings management in XmlParser 32/200732/3
authorAdrian Szyndela <adrian.s@samsung.com>
Fri, 1 Mar 2019 12:32:30 +0000 (13:32 +0100)
committerHyotaek Shim <hyotaek.shim@samsung.com>
Thu, 7 Mar 2019 07:37:50 +0000 (07:37 +0000)
File name is passed from external API by const char *.
This (at least partially) eliminates construction of std::string where
it is not needed.

Change-Id: I05375820fe2996cb4f95af5be8bbbab5ecd87fc4

src/internal/xml_parser.cpp
src/internal/xml_parser.hpp

index d5815e5..2433e03 100644 (file)
@@ -26,13 +26,9 @@ std::string expandPath(const std::string& parent_dir, const std::string& path) {
        return parent_dir + "/" + path;
 }
 
-std::string getDir(std::string path) {
-       // dirname may modify path, so we must pass a modifiable char* to it
-       char* modifiable_path = new char[path.size() + 1];
-       strncpy(modifiable_path, path.c_str(), path.size() + 1);
-       std::string ret = dirname(modifiable_path);
-       delete[] modifiable_path;
-       return ret;
+std::string getDir(const char *path) {
+       std::string p(path);
+       return dirname(&p.front());
 }
 
 class XmlParser::IncludeItem {
@@ -83,12 +79,12 @@ void text_handler(void *data, const char *text, int len) {
        }
 }
 
-bool XmlParser::isMainConfFile(const std::string& filename) {
+bool XmlParser::isMainConfFile(const char *filename) {
        switch (curr_bus) {
        case SYSTEM_BUS:
-               return (filename == SYSTEM_BUS_CONF_FILE_PRIMARY || filename == SYSTEM_BUS_CONF_FILE_SECONDARY);
+               return strcmp(filename, SYSTEM_BUS_CONF_FILE_PRIMARY) == 0 || strcmp(filename, SYSTEM_BUS_CONF_FILE_SECONDARY) == 0;
        case SESSION_BUS:
-               return (filename == SESSION_BUS_CONF_FILE_PRIMARY || filename == SESSION_BUS_CONF_FILE_SECONDARY);
+               return strcmp(filename, SESSION_BUS_CONF_FILE_PRIMARY) == 0 || strcmp(filename, SESSION_BUS_CONF_FILE_SECONDARY) == 0;
        }
        return false;
 }
@@ -180,14 +176,14 @@ void XmlParser::elementEnd(const char *el) {
        }
 }
 
-int XmlParser::parsePolicyConfigFile(BusType bus, const std::string& fname) {
+int XmlParser::parsePolicyConfigFile(BusType bus, const char *fname) {
        tslog::log("XmlParser::parsePolicyConfigFile called with filename: ", fname, "\n");
        curr_bus = bus;
        parsePolicyConfigFileInternal(fname);
        return ret_code;
 }
 
-void XmlParser::parsePolicyConfigFileInternal(const std::string& filename) {
+void XmlParser::parsePolicyConfigFileInternal(const char *filename) {
        ret_code = 0;
        try {
                parseXmlFile(filename);
@@ -208,13 +204,13 @@ void XmlParser::parsePolicyConfigFileInternal(const std::string& filename) {
        }
        std::vector<std::string> curr_included_files = included_files;  // deep copy
        for (const auto& included_file : curr_included_files) {
-               parsePolicyConfigFileInternal(included_file);
+               parsePolicyConfigFileInternal(included_file.c_str());
        }
 }
 
-std::unique_ptr<char[]> file2str(const std::string& filename) {
+std::unique_ptr<char[]> file2str(const char *filename) {
 
-       FILE *fp = fopen(filename.c_str(), "rb");
+       FILE *fp = fopen(filename, "rb");
        if (fp == nullptr) {
                throw std::runtime_error(std::string("Failed to open file: ").append(filename).c_str());
        }
@@ -240,7 +236,7 @@ std::unique_ptr<char[]> file2str(const std::string& filename) {
        return str;
 }
 
-void XmlParser::parseXmlFile(const std::string& filename) {
+void XmlParser::parseXmlFile(const char *filename) {
        included_files.clear();
 
        tslog::log("Processing: ", filename, " ...\n");
index 8ede445..a47b963 100644 (file)
@@ -33,7 +33,7 @@ namespace ldp_xml_parser
        {
        public:
                /** Parses given config file for declared bus type */
-               int parsePolicyConfigFile(BusType bus_type, const std::string& fname);
+               int parsePolicyConfigFile(BusType bus_type, const char *fname);
 
                void elementStart(const char *el, const char **attr);
 
@@ -47,13 +47,13 @@ namespace ldp_xml_parser
                class IncludeItem;
 
                /** Decides whether a filename describes one of main system.conf/session.conf files */
-               bool isMainConfFile(const std::string& filename);
+               bool isMainConfFile(const char *filename);
 
                /** Parses config file and all files included in it (recursively) */
-               void parsePolicyConfigFileInternal(const std::string& filename);
+               void parsePolicyConfigFileInternal(const char *filename);
 
                /** Parses config file and returns all files included in it */
-               void parseXmlFile(const std::string& filename);
+               void parseXmlFile(const char *filename);
 
                /** Parses <include> element */
                IncludeItem parseIncludeItem();