Detlef Riekenberg : winspool: Move DeleteMonitorW to the backend.

Alexandre Julliard julliard at winehq.org
Fri Jul 11 08:44:40 CDT 2008


Module: wine
Branch: master
Commit: f9a18b8fd7776aa80e47b91e69a5f00f8d65ed99
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f9a18b8fd7776aa80e47b91e69a5f00f8d65ed99

Author: Detlef Riekenberg <wine.dev at web.de>
Date:   Thu Jul 10 23:59:37 2008 +0200

winspool: Move DeleteMonitorW to the backend.

---

 dlls/localspl/localspl_main.c |   61 ++++++++++++++++++++++++++++++++++++++++-
 dlls/winspool.drv/info.c      |   37 +++----------------------
 2 files changed, 64 insertions(+), 34 deletions(-)

diff --git a/dlls/localspl/localspl_main.c b/dlls/localspl/localspl_main.c
index cf208f0..a6a7980 100644
--- a/dlls/localspl/localspl_main.c
+++ b/dlls/localspl/localspl_main.c
@@ -696,6 +696,65 @@ static BOOL WINAPI fpAddPrinterDriverEx(LPWSTR pName, DWORD level, LPBYTE pDrive
 
     return myAddPrinterDriverEx(level, pDriverInfo, dwFileCopyFlags, TRUE);
 }
+/******************************************************************
+ * fpDeleteMonitor [exported through PRINTPROVIDOR]
+ *
+ * Delete a specific Printmonitor from a Printing-Environment
+ *
+ * PARAMS
+ *  pName        [I] Servername or NULL (local Computer)
+ *  pEnvironment [I] Printing-Environment of the Monitor or NULL (Default)
+ *  pMonitorName [I] Name of the Monitor, that should be deleted
+ *
+ * RETURNS
+ *  Success: TRUE
+ *  Failure: FALSE
+ *
+ * NOTES
+ *  pEnvironment is ignored in Windows for the local Computer.
+ *
+ */
+
+BOOL WINAPI fpDeleteMonitor(LPWSTR pName, LPWSTR pEnvironment, LPWSTR pMonitorName)
+{
+    HKEY    hroot = NULL;
+    LONG    lres;
+
+    TRACE("(%s, %s, %s)\n",debugstr_w(pName),debugstr_w(pEnvironment),
+           debugstr_w(pMonitorName));
+
+    lres = copy_servername_from_name(pName, NULL);
+    if (lres) {
+        FIXME("server %s not supported\n", debugstr_w(pName));
+        SetLastError(ERROR_INVALID_NAME);
+        return FALSE;
+    }
+
+    /*  pEnvironment is ignored in Windows for the local Computer */
+    if (!pMonitorName || !pMonitorName[0]) {
+        TRACE("pMonitorName %s is invalid\n", debugstr_w(pMonitorName));
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    if(RegCreateKeyW(HKEY_LOCAL_MACHINE, monitorsW, &hroot) != ERROR_SUCCESS) {
+        ERR("unable to create key %s\n", debugstr_w(monitorsW));
+        return FALSE;
+    }
+
+    if(RegDeleteTreeW(hroot, pMonitorName) == ERROR_SUCCESS) {
+        TRACE("%s deleted\n", debugstr_w(pMonitorName));
+        RegCloseKey(hroot);
+        return TRUE;
+    }
+
+    TRACE("%s does not exist\n", debugstr_w(pMonitorName));
+    RegCloseKey(hroot);
+
+    /* NT: ERROR_UNKNOWN_PRINT_MONITOR (3000), 9x: ERROR_INVALID_PARAMETER (87) */
+    SetLastError(ERROR_UNKNOWN_PRINT_MONITOR);
+    return FALSE;
+}
 
 /*****************************************************************************
  * fpEnumMonitors [exported through PRINTPROVIDOR]
@@ -821,7 +880,7 @@ static const PRINTPROVIDOR * get_backend(void)
         NULL,   /* fpDeletePrinterConnection */
         NULL,   /* fpPrinterMessageBox */
         NULL,   /* fpAddMonitor */
-        NULL,   /* fpDeleteMonitor */
+        fpDeleteMonitor,
         NULL,   /* fpResetPrinter */
         NULL,   /* fpGetPrinterDriverEx */
         NULL,   /* fpFindFirstPrinterChangeNotification */
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 8ecddf0..81d6b61 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -2441,47 +2441,18 @@ BOOL WINAPI DeleteMonitorA (LPSTR pName, LPSTR pEnvironment, LPSTR pMonitorName)
  *  pEnvironment is ignored in Windows for the local Computer.
  *
  */
-
-BOOL WINAPI DeleteMonitorW (LPWSTR pName, LPWSTR pEnvironment, LPWSTR pMonitorName)
+BOOL WINAPI DeleteMonitorW(LPWSTR pName, LPWSTR pEnvironment, LPWSTR pMonitorName)
 {
-    HKEY    hroot = NULL;
 
     TRACE("(%s, %s, %s)\n",debugstr_w(pName),debugstr_w(pEnvironment),
            debugstr_w(pMonitorName));
 
-    if (pName && (pName[0])) {
-        FIXME("for server %s not implemented\n", debugstr_w(pName));
-        SetLastError(ERROR_ACCESS_DENIED);
-        return FALSE;
-    }
-
-    /*  pEnvironment is ignored in Windows for the local Computer */
-
-    if (!pMonitorName || !pMonitorName[0]) {
-        WARN("pMonitorName %s is invalid\n", debugstr_w(pMonitorName));
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-
-    if(RegCreateKeyW(HKEY_LOCAL_MACHINE, MonitorsW, &hroot) != ERROR_SUCCESS) {
-        ERR("unable to create key %s\n", debugstr_w(MonitorsW));
-        return FALSE;
-    }
-
-    if(RegDeleteTreeW(hroot, pMonitorName) == ERROR_SUCCESS) {
-        TRACE("monitor %s deleted\n", debugstr_w(pMonitorName));
-        RegCloseKey(hroot);
-        return TRUE;
-    }
-
-    WARN("monitor %s does not exist\n", debugstr_w(pMonitorName));
-    RegCloseKey(hroot);
+    if ((backend == NULL)  && !load_backend()) return FALSE;
 
-    /* NT: ERROR_UNKNOWN_PRINT_MONITOR (3000), 9x: ERROR_INVALID_PARAMETER (87) */
-    SetLastError(ERROR_UNKNOWN_PRINT_MONITOR);
-    return (FALSE);
+    return backend->fpDeleteMonitor(pName, pEnvironment, pMonitorName);
 }
 
+
 /******************************************************************
  *              DeletePortA        [WINSPOOL.@]
  *




More information about the wine-cvs mailing list