From c09b11ccf81f78d8c249cc8950e6d14ed16aa179 Mon Sep 17 00:00:00 2001 From: Marcel Partap Date: Sun, 27 Apr 2008 21:51:31 +0200 Subject: [PATCH] winspool: Implement DeleteFormA/W --- dlls/winspool.drv/info.c | 47 ++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 43 insertions(+), 4 deletions(-) diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 4abf2ef..e67285d 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -3374,8 +3374,24 @@ BOOL WINAPI ClosePrinter(HANDLE hPrinter) */ BOOL WINAPI DeleteFormA(HANDLE hPrinter, LPSTR pFormName) { - FIXME("(%p,%s): stub\n", hPrinter, pFormName); - return 1; + LPWSTR formnameW = NULL; + DWORD len; + BOOL res; + + TRACE("(%p, %s)\n", hPrinter, pFormName); + + if (pFormName) { + len = MultiByteToWideChar(CP_ACP, 0, pFormName, -1, NULL, 0); + if (len <= 1) { + SetLastError(ERROR_INVALID_FORM_NAME); + return FALSE; + } + formnameW = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, pFormName, -1, formnameW, len); + } + res = DeleteFormW(hPrinter, formnameW); + if (formnameW) HeapFree(GetProcessHeap(), 0, formnameW); + return res; } /***************************************************************************** @@ -3383,8 +3399,31 @@ BOOL WINAPI DeleteFormA(HANDLE hPrinter, LPSTR pFormName) */ BOOL WINAPI DeleteFormW(HANDLE hPrinter, LPWSTR pFormName) { - FIXME("(%p,%s): stub\n", hPrinter, debugstr_w(pFormName)); - return 1; + opened_printer_t *printer; + HKEY hformskey; + BOOL res = FALSE; + + TRACE("(%p, %s)\n", hPrinter, debugstr_w(pFormName)); + + printer = get_opened_printer(hPrinter); + if (!printer) { + SetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + if (!pFormName) { + SetLastError(RPC_X_NULL_REF_POINTER); + return FALSE; + } + if (RegOpenKeyW(HKEY_LOCAL_MACHINE, FormsW, &hformskey) != ERROR_SUCCESS) { + ERR("could not open reg key %s", debugstr_w(FormsW)); + return FALSE; + } + if (RegDeleteValueW(hformskey, pFormName) == ERROR_SUCCESS) + res = TRUE; + if (!res) + SetLastError(ERROR_INVALID_FORM_NAME); + RegCloseKey(hformskey); + return res; } /***************************************************************************** -- 1.5.5.1