Chromium Code Reviews| Index: printing/backend/print_backend_win.cc |
| =================================================================== |
| --- printing/backend/print_backend_win.cc (revision 72357) |
| +++ printing/backend/print_backend_win.cc (working copy) |
| @@ -43,7 +43,7 @@ |
| PrintBackendWin() {} |
| virtual ~PrintBackendWin() {} |
| - virtual void EnumeratePrinters(PrinterList* printer_list); |
| + virtual bool EnumeratePrinters(PrinterList* printer_list); |
| virtual bool GetPrinterCapsAndDefaults(const std::string& printer_name, |
| PrinterCapsAndDefaults* printer_info); |
| @@ -51,35 +51,39 @@ |
| virtual bool IsValidPrinter(const std::string& printer_name); |
| }; |
| -void PrintBackendWin::EnumeratePrinters(PrinterList* printer_list) { |
| +bool PrintBackendWin::EnumeratePrinters(PrinterList* printer_list) { |
| DCHECK(printer_list); |
| DWORD bytes_needed = 0; |
| DWORD count_returned = 0; |
| BOOL ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, 2, |
| NULL, 0, &bytes_needed, &count_returned); |
| - if (0 != bytes_needed) { |
| - scoped_ptr<BYTE> printer_info_buffer(new BYTE[bytes_needed]); |
| - ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, 2, |
| - printer_info_buffer.get(), bytes_needed, &bytes_needed, |
| - &count_returned); |
| - DCHECK(ret); |
| - PRINTER_INFO_2* printer_info = |
| - reinterpret_cast<PRINTER_INFO_2*>(printer_info_buffer.get()); |
| - for (DWORD index = 0; index < count_returned; index++) { |
| - PrinterBasicInfo info; |
| - info.printer_name = WideToUTF8(printer_info[index].pPrinterName); |
| - if (printer_info[index].pComment) |
| - info.printer_description = WideToUTF8(printer_info[index].pComment); |
| - info.printer_status = printer_info[index].Status; |
| - if (printer_info[index].pLocation) |
| - info.options[kLocationTagName] = |
| - WideToUTF8(printer_info[index].pLocation); |
| - if (printer_info[index].pDriverName) |
| - info.options[kDriverNameTagName] = |
| - WideToUTF8(printer_info[index].pDriverName); |
| - printer_list->push_back(info); |
| - } |
| + if (!bytes_needed) |
|
Scott Byer
2011/01/24 20:02:07
Check the return value as well?
|
| + return false; |
| + scoped_ptr<BYTE> printer_info_buffer(new BYTE[bytes_needed]); |
| + ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, 2, |
| + printer_info_buffer.get(), bytes_needed, &bytes_needed, |
| + &count_returned); |
| + DCHECK(ret); |
| + if (!ret) |
| + return false; |
| + |
| + PRINTER_INFO_2* printer_info = |
| + reinterpret_cast<PRINTER_INFO_2*>(printer_info_buffer.get()); |
| + for (DWORD index = 0; index < count_returned; index++) { |
| + PrinterBasicInfo info; |
| + info.printer_name = WideToUTF8(printer_info[index].pPrinterName); |
| + if (printer_info[index].pComment) |
| + info.printer_description = WideToUTF8(printer_info[index].pComment); |
| + info.printer_status = printer_info[index].Status; |
| + if (printer_info[index].pLocation) |
| + info.options[kLocationTagName] = |
| + WideToUTF8(printer_info[index].pLocation); |
| + if (printer_info[index].pDriverName) |
| + info.options[kDriverNameTagName] = |
| + WideToUTF8(printer_info[index].pDriverName); |
| + printer_list->push_back(info); |
| } |
| + return true; |
| } |
| bool PrintBackendWin::GetPrinterCapsAndDefaults( |