PackageManager
[reactos.git] / rosapps / packmgr / lib / tree.cpp
index 030e633..6cae038 100644 (file)
@@ -40,9 +40,8 @@ extern "C" int PML_LoadTree (TREE** tree, char* url, PML_AddItem AddItem)
 // expat callback for start of a "node" tag\r
 void tree_start (void* usrdata, const char* tag, const char** arg)\r
 {\r
-       int i, icon;\r
+       int i, icon = 0;\r
        static int id = 1;\r
-       const char* name = "\0";\r
 \r
        TREE* tree = (TREE*)usrdata;\r
 \r
@@ -58,12 +57,16 @@ void tree_start (void* usrdata, const char* tag, const char** arg)
        tree->packages[id].icon = FALSE;\r
        tree->packages[id].none = TRUE;\r
        tree->packages[id].path = NULL;\r
+       tree->packages[id].name = "\0";\r
 \r
        // read the arguments\r
        for (i=0; arg[i]; i+=2) \r
        {\r
                if(!strcmp(arg[i], "name"))\r
-                       name = arg[i+1];\r
+               {\r
+                       tree->packages[id].name = new char [strlen(arg[i+1])+1];\r
+                       strcpy(tree->packages[id].name, arg[i+1]);\r
+               }\r
 \r
                if(!strcmp(arg[i], "icon"))\r
                {\r
@@ -73,7 +76,7 @@ void tree_start (void* usrdata, const char* tag, const char** arg)
 \r
                if(!strcmp(arg[i], "file"))\r
                {\r
-                       tree->packages[id].path = new char [strlen(arg[i+1])];\r
+                       tree->packages[id].path = new char [strlen(arg[i+1])+1];\r
                        strcpy(tree->packages[id].path, arg[i+1]);\r
 \r
                        if(strcmp(tag, "bin"))\r
@@ -84,14 +87,19 @@ void tree_start (void* usrdata, const char* tag, const char** arg)
                }\r
        }\r
 \r
-       if(name[0]=='\0') return;\r
+       if(tree->packages[id].name[0] == '\0') return;\r
 \r
        // add it\r
        if(!parents.size())\r
-          tree->addItem(id, name, 0, icon);\r
+       {\r
+               if(tree->addItem)\r
+                       tree->addItem(id, tree->packages[id].name, 0, icon);\r
+       }\r
+\r
+       // do some manipulation at the parent\r
        else\r
        {\r
-          tree->addItem(id, name, parents.back(), icon);\r
+               tree->addItem(id, tree->packages[id].name, parents.back(), icon);\r
 \r
           // list as child in the parent node\r
           tree->packages[parents.back()].children.push_back(id);\r