diff options
author | Jan Darmochwal | 2010-07-13 01:01:27 +0200 |
---|---|---|
committer | Jan Darmochwal | 2010-07-13 01:01:27 +0200 |
commit | 8bc8aa8b6687926e4391c3687a4957f4798400c3 (patch) | |
tree | 9856081e8aec953fe61b5b62b54874ac54ba26b5 /vmchooser/readXmlDir.cxx | |
parent | Revert "Qt4 port" use branch instead of subdirectory for Qt4 port (diff) | |
download | vmchooser-8bc8aa8b6687926e4391c3687a4957f4798400c3.tar.gz vmchooser-8bc8aa8b6687926e4391c3687a4957f4798400c3.tar.xz vmchooser-8bc8aa8b6687926e4391c3687a4957f4798400c3.zip |
initial qt4 version
Diffstat (limited to 'vmchooser/readXmlDir.cxx')
-rw-r--r-- | vmchooser/readXmlDir.cxx | 68 |
1 files changed, 40 insertions, 28 deletions
diff --git a/vmchooser/readXmlDir.cxx b/vmchooser/readXmlDir.cxx index a3952ca..7e90797 100644 --- a/vmchooser/readXmlDir.cxx +++ b/vmchooser/readXmlDir.cxx @@ -33,7 +33,8 @@ string env; vector<string> xmlVec; xmlXPathObjectPtr evalXPath(xmlDocPtr doc, const char* path) { - xmlXPathContextPtr xp = xmlXPathNewContext(doc); + printf("evalXPath(doc, %s)\n", path); + xmlXPathContextPtr xp = xmlXPathNewContext(doc); string bla = string(path); if(xp == NULL) { fprintf(stderr,"Error: unable to create new XPath context\n"); @@ -53,12 +54,11 @@ xmlXPathObjectPtr evalXPath(xmlDocPtr doc, const char* path) { char* getAttribute(xmlDoc *doc, char* name) { - xmlNode* temp; + printf("getAttribute(doc, %s)\n", name); + xmlNode* temp; string path = string("/settings/eintrag/")+ string(name)+ string("/@param"); char* cpath = strdup(path.c_str()); - //print_xpath_nodes(xpp->nodesetval, stdout); - // Get Attribute via XPath xmlXPathObjectPtr xpp = evalXPath( doc, @@ -66,6 +66,8 @@ char* getAttribute(xmlDoc *doc, char* name) ); free(cpath); + //print_xpath_nodes(xpp->nodesetval, stdout); + int size; size = (xpp->nodesetval) ? xpp->nodesetval->nodeNr: 0; for (int i= 0; i < size; i++) { @@ -83,6 +85,7 @@ char* getAttribute(xmlDoc *doc, char* name) char* getNodeValue(xmlDoc *doc, char* name) { + printf("getNodeValue(doc, %s)", name); xmlNode* temp; xmlXPathContextPtr xp = xmlXPathNewContext(doc); string bla = string("/settings/eintrag/")+ string(name); @@ -117,13 +120,13 @@ char* getNodeValue(xmlDoc *doc, char* name) DataEntry* get_entry(xmlDoc * doc) { + printf("get_entry(doc)\n"); char *tempc = NULL; DataEntry* de = new DataEntry(); tempc = getAttribute(doc,(char *)"short_description"); if (tempc != NULL ) { de->short_description = tempc; - // replace a substring std::string dest_string, dest1_string; boost::regex re("\n|\r"); @@ -132,7 +135,10 @@ DataEntry* get_entry(xmlDoc * doc) de->short_description.end(), re, " "); - } + } else { + // TODO: fix this + de->short_description = "short_description failed"; + } tempc = NULL; if (de->short_description.empty()) { @@ -265,16 +271,18 @@ DataEntry* get_entry(xmlDoc * doc) * -> if no xmlfilter.sh is available, it globs for available xmls * - reads all xml files and creates for each its own DataEntry-struct */ -DataEntry** readXmlDir(char* path) +std::vector<DataEntry> readXmlDir(char* path) { const int MAX_LENGTH = 256; char line[MAX_LENGTH]; char* fpath = getFolderName(); FILE* inp; + printf("readXmlDir %s\n", path); + LIBXML_TEST_VERSION if ( path== NULL) { - return NULL; + return std::vector<DataEntry>(); } bfs::path filter(string(fpath).append("/").append(filterscript)); @@ -313,23 +321,26 @@ DataEntry** readXmlDir(char* path) char* tstr = 0; for(int c=0; c<globbuf.gl_pathc; c++) { + printf("reading file %s\n", globbuf.gl_pathv[c]); tdoc = xmlReadFile(globbuf.gl_pathv[c],NULL,XML_PARSE_RECOVER|XML_PARSE_NOERROR); if(!tdoc) { cerr << "Error opening xml file " << globbuf.gl_pathv[c] << "!" << endl; - return 0; + return std::vector<DataEntry>(); } tstr = getAttribute(tdoc, (char*)"pools"); - if(tstr == 0) { - xmlFreeDoc(tdoc); - continue; - } - if(env == tstr) { +// if(tstr == 0) { +// xmlFreeDoc(tdoc); +// continue; +// } + +// if(env == tstr) { + printf("xmlVec.push_back(%s)\n", globbuf.gl_pathv[c]); xmlVec.push_back(string(globbuf.gl_pathv[c]) ); - } +// } xmlFreeDoc(tdoc); tdoc = 0; tstr = 0; @@ -345,9 +356,10 @@ DataEntry** readXmlDir(char* path) // We need to reserve the memory for all the pointers here if(xmlVec.size() == 0) { - return NULL; + return std::vector<DataEntry>(); } - DataEntry** result = (DataEntry**) malloc(xmlVec.size() * sizeof(DataEntry*) +1); + + std::vector<DataEntry> result; for (unsigned int i=0; i < xmlVec.size(); i++) { loc = xmlVec[i].find( "Vorlage" ); @@ -361,7 +373,7 @@ DataEntry** readXmlDir(char* path) /* DEBUG */ - //printf("File: %s, COUNT: %d\n", xmlVec[i].c_str(), xmlVec.size()); + printf("File: %s, COUNT: %d\n", xmlVec[i].c_str(), xmlVec.size()); if ( S_ISDIR(m.st_mode) ) { continue; } @@ -372,22 +384,22 @@ DataEntry** readXmlDir(char* path) continue; } - result[c] = get_entry(doc); - if (result[c] != 0) { - result[c]->xml_name = xmlVec[i]; + result.push_back(*get_entry(doc)); + //if (result[c] != 0) { + result[c].xml_name = xmlVec[i]; c++; - } + //} /* xmlDoc still needed to write back information for VMware etc. */ // xmlFreeDoc(doc); } - result[c] = '\0'; - if(c!= 0) { + //result[c] = '\0'; + //if(c!= 0) { return result; - } - else { - return NULL; - } + //} + //else { + // return NULL; + //} } |