Make WritePrivateProfileSectionA care for "" and NULL as the
string argument. New function PROFILE_DeleteAllKeys.

diff --git a/files/profile.c b/files/profile.c
index 99d04f4..afbf8b0 100644
--- a/files/profile.c
+++ b/files/profile.c
@@ -393,6 +393,34 @@
 
 
 /***********************************************************************
+ *           PROFILE_DeleteAllKeys
+ *
+ * Delete all keys from a profile tree.
+ */
+void PROFILE_DeleteAllKeys( LPCSTR section_name)
+{
+    PROFILESECTION **section= &CurProfile->section;
+    while (*section)
+    {
+        if ((*section)->name && !strcasecmp( (*section)->name, section_name ))
+        {
+            PROFILEKEY **key = &(*section)->key;
+            while (*key)
+            {
+                PROFILEKEY *to_del = *key;
+		*key = to_del->next;
+		if (to_del->name) HeapFree( GetProcessHeap(), 0, to_del->name );
+		if (to_del->value) HeapFree( GetProcessHeap(), 0, to_del->value);
+		HeapFree( GetProcessHeap(), 0, to_del );
+		CurProfile->changed =TRUE;
+            }
+        }
+        section = &(*section)->next;
+    }
+}
+
+
+/***********************************************************************
  *           PROFILE_Find
  *
  * Find a key in a profile tree, optionally creating it.
@@ -1386,9 +1414,13 @@
     if (PROFILE_Open( filename )) {
         if (!section && !string && !filename)
             PROFILE_ReleaseFile();  /* always return FALSE in this case */
+        else if (!string) /* delete the named section*/
+	    ret = PROFILE_SetString(section,NULL,NULL);
         else {
-            while(*string){
-                LPSTR buf=HEAP_strdupA( GetProcessHeap(), 0, string );
+	    PROFILE_DeleteAllKeys(section);
+	    ret = TRUE;
+	    while(*string) {
+	        LPSTR buf=HEAP_strdupA( GetProcessHeap(), 0, string );
                 if((p=strchr( buf, '='))){
                     *p='\0';
                     ret = PROFILE_SetString( section, buf, p+1 );