--- sourceforge.net/trunk/rdesktop/printer.c 2004/01/21 14:40:40 569 +++ sourceforge.net/trunk/rdesktop/printer.c 2004/04/17 07:14:41 664 @@ -1,10 +1,9 @@ -#define MAX_PRINTERS 5 - #include "rdesktop.h" extern RDPDR_DEVICE g_rdpdr_device[]; -PRINTER * get_printer_data(HANDLE handle) +static PRINTER * +get_printer_data(HANDLE handle) { int index; @@ -17,7 +16,7 @@ } int -printer_enum_devices(int *id, char *optarg) +printer_enum_devices(uint32 * id, char *optarg) { PRINTER *pprinter_data; @@ -45,7 +44,7 @@ pprinter_data = (PRINTER *) xmalloc(sizeof(PRINTER)); strcpy(g_rdpdr_device[*id].name, "PRN"); - strcat(g_rdpdr_device[*id].name, ltoa(already + count + 1, 10)); + strcat(g_rdpdr_device[*id].name, l_to_a(already + count + 1, 10)); /* first printer is set as default printer */ if ((already + count) == 0) @@ -53,7 +52,7 @@ else pprinter_data->default_printer = False; - pos2 = next_arg(optarg, ':'); + pos2 = next_arg(optarg, '='); if (*optarg == (char) 0x00) pprinter_data->printer = "mydeskjet"; /* set default */ else @@ -102,7 +101,7 @@ pprinter_data->printer_fp = popen(cmd, "w"); } - g_rdpdr_device[device_id].handle = pprinter_data->printer_fp->_fileno; + g_rdpdr_device[device_id].handle = fileno(pprinter_data->printer_fp); *handle = g_rdpdr_device[device_id].handle; return STATUS_SUCCESS; } @@ -110,14 +109,14 @@ static NTSTATUS printer_close(HANDLE handle) { - PRINTER *pprinter_data; - - pprinter_data = get_printer_data(handle); - - g_rdpdr_device[get_device_index(handle)].handle = 0; - - pclose(pprinter_data->printer_fp); - + int i = get_device_index(handle); + if (i >= 0) + { + PRINTER *pprinter_data = g_rdpdr_device[i].pdevice_data; + if (pprinter_data) + pclose(pprinter_data->printer_fp); + g_rdpdr_device[i].handle = 0; + } return STATUS_SUCCESS; } @@ -144,3 +143,4 @@ printer_write, NULL /* device_control */ }; +