CVS: winex/server protocol.def, 1.43, 1.44 registry.c, 1.14, 1.15 request.h, 1.28, 1.29 trace.c, 1.44, 1.45

[email protected] 31 Jul 2007 19:58:32 -0000
Newsgroups gmane.comp.emulators.winex.cvs
Message-ID <[email protected]>
Subject: winex/server protocol.def,1.43,1.44 registry.c,1.14,1.15 request.h,1.28,1.29 trace.c,1.44,1.45Update of /var/lib/cvsd/cvsroot/winex/server
In directory agravaine:/tmp/cvs-serv2144/server

Modified Files:
	protocol.def registry.c request.h trace.c 
Log Message:
Implement RegFlushKey.
Do some minor cleanups of duplicated functions.


Index: protocol.def
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/server/protocol.def,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- protocol.def	31 Jul 2007 19:39:35 -0000	1.43
+++ protocol.def	31 Jul 2007 19:58:30 -0000	1.44
@@ -3,7 +3,7 @@
  * Wine server protocol definition
  *
  * Copyright (C) 2001 Alexandre Julliard
- * Copyright (C) 2004 TransGaming Technologies
+ * Copyright (C) 2004-2007 TransGaming Technologies
  *
  * This file is used by tools/make_requests to build the
  * protocol structures in include/wine/server_protocol.h
@@ -1274,6 +1274,12 @@
 @END
 
 
+/* Flush a registry key */
+@REQ(flush_key)
+    handle_t     hkey;         /* handle to the key */
+@END
+
+
 /* Enumerate registry subkeys */
 @REQ(enum_key)
     handle_t     hkey;         /* handle to registry key */

Index: registry.c
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/server/registry.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- registry.c	31 Jul 2007 19:39:35 -0000	1.14
+++ registry.c	31 Jul 2007 19:58:30 -0000	1.15
@@ -1711,6 +1711,43 @@
     }
 }
 
+/* flush the hive containing a registry key */
+DECL_HANDLER(flush_key)
+{
+   struct key *key;
+
+   if ((key = get_hkey_obj (req->hkey, 0 /*FIXME*/)))
+   {
+      struct key *root = key;
+      int i;
+
+      /* Walk up tree to find root key */
+      while (root->parent && !(root->flags & KEY_ROOT))
+         root = root->parent;
+
+      /* Find save info for our root key, and do the save */
+      for (i = 0; i < SERVER_STATIC_VARIABLE (registry, save_branch_count); i++)
+      {
+         if (SERVER_STATIC_VARIABLE (registry, save_branch_info[i].key) == root)
+         {
+            save_branch (SERVER_STATIC_VARIABLE (registry, save_branch_info[i].key),
+                         SERVER_STATIC_VARIABLE (registry, save_branch_info[i].path));
+            break;
+         }
+      }
+
+      /* Let's be pedantic */
+      if (i == SERVER_STATIC_VARIABLE (registry, save_branch_count))
+      {
+         info_msg (WITH_DEBUG, current,
+                   "Unable to find root registry for saving!\n");
+         set_error (STATUS_INVALID_HANDLE);
+      }
+
+      release_object (key);
+   }
+}
+
 /* enumerate registry subkeys */
 DECL_HANDLER(enum_key)
 {

Index: request.h
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/server/request.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- request.h	31 Jul 2007 18:00:22 -0000	1.28
+++ request.h	31 Jul 2007 19:58:30 -0000	1.29
@@ -231,6 +231,7 @@
 DECL_HANDLER(create_key);
 DECL_HANDLER(open_key);
 DECL_HANDLER(delete_key);
+DECL_HANDLER(flush_key);
 DECL_HANDLER(enum_key);
 DECL_HANDLER(set_key_value);
 DECL_HANDLER(get_key_value);
@@ -410,6 +411,7 @@
     (req_handler)req_create_key,
     (req_handler)req_open_key,
     (req_handler)req_delete_key,
+    (req_handler)req_flush_key,
     (req_handler)req_enum_key,
     (req_handler)req_set_key_value,
     (req_handler)req_get_key_value,

Index: trace.c
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/server/trace.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -d -r1.44 -r1.45
--- trace.c	31 Jul 2007 19:39:35 -0000	1.44
+++ trace.c	31 Jul 2007 19:58:30 -0000	1.45
@@ -1455,6 +1455,11 @@
     fprintf( stderr, " hkey=%d", req->hkey );
 }
 
+static void dump_flush_key_request( const struct flush_key_request *req )
+{
+    fprintf( stderr, " hkey=%d", req->hkey );
+}
+
 static void dump_enum_key_request( const struct enum_key_request *req )
 {
     fprintf( stderr, " hkey=%d,", req->hkey );
@@ -2409,6 +2414,7 @@
     (dump_func)dump_create_key_request,
     (dump_func)dump_open_key_request,
     (dump_func)dump_delete_key_request,
+    (dump_func)dump_flush_key_request,
     (dump_func)dump_enum_key_request,
     (dump_func)dump_set_key_value_request,
     (dump_func)dump_get_key_value_request,
@@ -2585,6 +2591,7 @@
     (dump_func)dump_create_key_reply,
     (dump_func)dump_open_key_reply,
     (dump_func)0,
+    (dump_func)0,
     (dump_func)dump_enum_key_reply,
     (dump_func)0,
     (dump_func)dump_get_key_value_reply,
@@ -2761,6 +2768,7 @@
     "create_key",
     "open_key",
     "delete_key",
+    "flush_key",
     "enum_key",
     "set_key_value",
     "get_key_value",