[ros-diffs] [gedmurphy] 44681: Recurse the tree and clean up all the strings tagged to the items. Servman now has working dependency tracking

gedmurphy at svn.reactos.org gedmurphy at svn.reactos.org
Mon Dec 21 15:25:55 CET 2009


Author: gedmurphy
Date: Mon Dec 21 15:25:54 2009
New Revision: 44681

URL: http://svn.reactos.org/svn/reactos?rev=44681&view=rev
Log:
Recurse the tree and clean up all the strings tagged to the items. Servman now has working dependency tracking

Modified:
    trunk/reactos/base/applications/mscutils/servman/propsheet_depends.c

Modified: trunk/reactos/base/applications/mscutils/servman/propsheet_depends.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/servman/propsheet_depends.c?rev=44681&r1=44680&r2=44681&view=diff
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/propsheet_depends.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/servman/propsheet_depends.c [iso-8859-1] Mon Dec 21 15:25:54 2009
@@ -27,8 +27,9 @@
     tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_IMAGE | TVIF_CHILDREN;
     tvi.pszText = lpDisplayName;
     tvi.cchTextMax = _tcslen(lpDisplayName);
-    tvi.cChildren = bHasChildren; //I_CHILDRENCALLBACK;
-
+    tvi.cChildren = bHasChildren;
+
+    /* Select the image for this service */
     switch (ServiceType)
     {
         case SERVICE_WIN32_OWN_PROCESS:
@@ -49,13 +50,16 @@
             break;
     }
 
-    /* Attach the service name */
-    tvi.lParam = (LPARAM)(LPTSTR)HeapAlloc(GetProcessHeap(),
-                                           0,
-                                           (_tcslen(lpServiceName) + 1) * sizeof(TCHAR));
-    if (tvi.lParam)
-    {
-        _tcscpy((LPTSTR)tvi.lParam, lpServiceName);
+    if (lpServiceName)
+    {
+        /* Attach the service name */
+        tvi.lParam = (LPARAM)(LPTSTR)HeapAlloc(GetProcessHeap(),
+                                               0,
+                                               (_tcslen(lpServiceName) + 1) * sizeof(TCHAR));
+        if (tvi.lParam)
+        {
+            _tcscpy((LPTSTR)tvi.lParam, lpServiceName);
+        }
     }
 
     tvins.item = tvi;
@@ -64,10 +68,73 @@
     return TreeView_InsertItem(hTreeView, &tvins);
 }
 
+static LPARAM
+TreeView_GetItemParam(HWND hTreeView,
+                      HTREEITEM hItem)
+{
+    LPARAM lParam = 0;
+    TVITEM tv = {0};
+
+    tv.mask = TVIF_PARAM | TVIF_HANDLE;
+    tv.hItem = hItem;
+
+    if (TreeView_GetItem(hTreeView, &tv))
+    {
+        lParam = tv.lParam;
+    }
+
+    return lParam;
+}
+
+static VOID
+DestroyItem(HWND hTreeView,
+            HTREEITEM hItem)
+{
+    HTREEITEM hChildItem;
+    LPTSTR lpServiceName;
+
+    /* Does this item have any children */
+    hChildItem = TreeView_GetChild(hTreeView, hItem);
+    if (hChildItem)
+    {
+        /* It does, recurse to that one */
+        DestroyItem(hTreeView, hChildItem);
+    }
+
+    /* Get the string and free it */
+    lpServiceName = (LPTSTR)TreeView_GetItemParam(hTreeView, hItem);
+    if (lpServiceName)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpServiceName);
+    }
+}
+
 static VOID
 DestroyTreeView(HWND hTreeView)
 {
-    //FIXME: traverse the nodes and free the strings
+    HTREEITEM hItem;
+
+    /* Get the first item in the top level */
+    hItem = TreeView_GetFirstVisible(hTreeView);
+    if (hItem)
+    {
+        /* Kill it and all children */
+        DestroyItem(hTreeView, hItem);
+
+        /* Kill all remaining top level items */
+        while (hItem)
+        {
+            /* Are there any more items at the top level */
+            hItem = TreeView_GetNextSibling(hTreeView, hItem);
+            if (hItem)
+            {
+                /*  Kill it and all children */
+                DestroyItem(hTreeView, hItem);
+            }
+        }
+    }
 }
 
 /*
@@ -85,25 +152,6 @@
     tv.cchTextMax = (int)cbBuffer;
 
     return TreeView_GetItem(hTreeView, &tv);
-}
-
-
-static LPARAM
-TreeView_GetItemParam(HWND hTreeView,
-                      HTREEITEM hItem)
-{
-    LPARAM lParam = 0;
-    TVITEM tv = {0};
-
-    tv.mask = TVIF_PARAM | TVIF_HANDLE;
-    tv.hItem = hItem;
-
-    if (TreeView_GetItem(hTreeView, &tv))
-    {
-        lParam = tv.lParam;
-    }
-
-    return lParam;
 }
 */
 




More information about the Ros-diffs mailing list