From a2e6c7340d6059d394dcbeff3859384054a3513f Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Wed, 4 Apr 2012 15:03:31 +0100 Subject: [PATCH] wineps: Change the printer info list into a standard list. --- dlls/wineps.drv/init.c | 24 ++++++++++-------------- dlls/wineps.drv/psdrv.h | 5 +++-- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index 84e40863dee..7e4ca5123d0 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -530,15 +530,15 @@ static INT PSDRV_GetDeviceCaps( PHYSDEV dev, INT cap ) } } +static struct list printer_list = LIST_INIT( printer_list ); /********************************************************************** * PSDRV_FindPrinterInfo */ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) { - static PRINTERINFO *PSDRV_PrinterList; DWORD type = REG_BINARY, needed, res, dwPaperSize; - PRINTERINFO *pi = PSDRV_PrinterList, **last = &PSDRV_PrinterList; + PRINTERINFO *pi; FONTNAME *font; const AFM *afm; HANDLE hPrinter = 0; @@ -551,17 +551,14 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) TRACE("'%s'\n", debugstr_w(name)); - /* - * If this loop completes, last will point to the 'next' element of the - * final PRINTERINFO in the list - */ - for( ; pi; last = &pi->next, pi = pi->next) - if(!strcmpW(pi->friendly_name, name)) - return pi; + LIST_FOR_EACH_ENTRY( pi, &printer_list, PRINTERINFO, entry ) + { + if (!strcmpW( pi->friendly_name, name )) + return pi; + } - pi = *last = HeapAlloc( PSDRV_Heap, HEAP_ZERO_MEMORY, sizeof(*pi) ); - if (pi == NULL) - return NULL; + pi = HeapAlloc( PSDRV_Heap, HEAP_ZERO_MEMORY, sizeof(*pi) ); + if (pi == NULL) return NULL; if (!(pi->friendly_name = HeapAlloc( PSDRV_Heap, 0, (strlenW(name)+1)*sizeof(WCHAR) ))) goto fail; strcpyW( pi->friendly_name, name ); @@ -775,7 +772,6 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) goto cleanup; } - pi->next = NULL; pi->Fonts = NULL; for(font = pi->ppd->InstalledFonts; font; font = font->next) { @@ -795,6 +791,7 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCWSTR name) } HeapFree( GetProcessHeap(), 0, nameA ); if (ppd) unlink(ppd); + list_add_head( &printer_list, &pi->entry ); return pi; closeprinter: @@ -808,7 +805,6 @@ fail: HeapFree(PSDRV_Heap, 0, pi); HeapFree( GetProcessHeap(), 0, nameA ); if (ppd) unlink(ppd); - *last = NULL; return NULL; } diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index 53186c7f3d7..df86c70f7d0 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -241,14 +241,15 @@ numInstalledOptions of OPTIONs } PSDRV_DEVMODEA; -typedef struct _tagPI { +typedef struct +{ + struct list entry; WCHAR *friendly_name; PPD *ppd; PSDRV_DEVMODEA *Devmode; FONTFAMILY *Fonts; PPRINTER_ENUM_VALUESA FontSubTable; DWORD FontSubTableSize; - struct _tagPI *next; } PRINTERINFO; typedef struct {