summaryrefslogtreecommitdiffstats
path: root/vmchooser/readXmlDir.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vmchooser/readXmlDir.cxx')
-rw-r--r--vmchooser/readXmlDir.cxx68
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;
+ //}
}