|
1 | 1 | /*
|
2 |
| - * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
4 | 4 | *
|
5 | 5 | * This code is free software; you can redistribute it and/or modify it
|
@@ -133,12 +133,25 @@ static jobjectArray getPrinterNames(JNIEnv *env, DWORD flags) {
|
133 | 133 | jobjectArray nameArray;
|
134 | 134 |
|
135 | 135 | try {
|
136 |
| - ::EnumPrinters(flags, |
137 |
| - NULL, 4, NULL, 0, &cbNeeded, &cReturned); |
138 |
| - pPrinterEnum = new BYTE[cbNeeded]; |
139 |
| - ::EnumPrinters(flags, |
140 |
| - NULL, 4, pPrinterEnum, cbNeeded, &cbNeeded, |
141 |
| - &cReturned); |
| 136 | + ::EnumPrinters(flags, NULL, 4, NULL, |
| 137 | + 0, &cbNeeded, &cReturned); |
| 138 | + |
| 139 | + BOOL bResult; |
| 140 | + int nCount = 0; |
| 141 | + do { |
| 142 | + if (pPrinterEnum != NULL) { |
| 143 | + delete [] pPrinterEnum; |
| 144 | + } |
| 145 | + pPrinterEnum = new BYTE[cbNeeded]; |
| 146 | + |
| 147 | + bResult = ::EnumPrinters(flags, NULL, 4, pPrinterEnum, |
| 148 | + cbNeeded, &cbNeeded, &cReturned); |
| 149 | + } while (!bResult && ++nCount < 5); |
| 150 | + |
| 151 | + if (!bResult) { |
| 152 | + // No printers in case of error |
| 153 | + cReturned = 0; |
| 154 | + } |
142 | 155 |
|
143 | 156 | if (cReturned > 0) {
|
144 | 157 | nameArray = env->NewObjectArray(cReturned, clazz, NULL);
|
|
0 commit comments