< prev index next >

src/java.desktop/windows/native/libawt/windows/WPrinterJob.cpp

Print this page




 249     if (clazz == NULL) {
 250         return NULL;
 251     }
 252     jobjectArray nameArray;
 253 
 254     try {
 255         ::EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS,
 256                        NULL, 4, NULL, 0, &cbNeeded, &cReturned);
 257         pPrinterEnum = new BYTE[cbNeeded];
 258         pNetworkPrinterLoc = new BYTE[cbNeeded/sizeof(PRINTER_INFO_4)];
 259         ::EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS,
 260                        NULL, 4, pPrinterEnum, cbNeeded, &cbNeeded,
 261                        &cReturned);
 262 
 263         if (cReturned > 0) {
 264             for (DWORD i = 0; i < cReturned; i++) {
 265                 PRINTER_INFO_4 *info4 = (PRINTER_INFO_4 *) (pPrinterEnum + i * sizeof(PRINTER_INFO_4));
 266 
 267                 // Store the network printers indexes
 268                 if (info4->Attributes & PRINTER_ATTRIBUTE_NETWORK) {
 269                     pNetworkPrinterLoc[remotePrintersCount++] = i;
 270                 }
 271             }
 272 
 273             // Allocate space only for the network type printers
 274             nameArray = env->NewObjectArray(remotePrintersCount, clazz, NULL);
 275             if (nameArray == NULL) {
 276                 throw std::bad_alloc();
 277             }
 278         } else {
 279             nameArray = NULL;
 280         }
 281 
 282         // Loop thro' network printers list only
 283         for (int i = 0; i < remotePrintersCount; i++) {
 284             PRINTER_INFO_4 *info4 = (PRINTER_INFO_4 *)
 285                 (pPrinterEnum + pNetworkPrinterLoc[i] * sizeof(PRINTER_INFO_4));
 286             utf_str = JNU_NewStringPlatform(env, info4->pPrinterName);
 287             if (utf_str == NULL) {
 288                 throw std::bad_alloc();
 289             }




 249     if (clazz == NULL) {
 250         return NULL;
 251     }
 252     jobjectArray nameArray;
 253 
 254     try {
 255         ::EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS,
 256                        NULL, 4, NULL, 0, &cbNeeded, &cReturned);
 257         pPrinterEnum = new BYTE[cbNeeded];
 258         pNetworkPrinterLoc = new BYTE[cbNeeded/sizeof(PRINTER_INFO_4)];
 259         ::EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS,
 260                        NULL, 4, pPrinterEnum, cbNeeded, &cbNeeded,
 261                        &cReturned);
 262 
 263         if (cReturned > 0) {
 264             for (DWORD i = 0; i < cReturned; i++) {
 265                 PRINTER_INFO_4 *info4 = (PRINTER_INFO_4 *) (pPrinterEnum + i * sizeof(PRINTER_INFO_4));
 266 
 267                 // Store the network printers indexes
 268                 if (info4->Attributes & PRINTER_ATTRIBUTE_NETWORK) {
 269                     pNetworkPrinterLoc[remotePrintersCount++] = static_cast<BYTE>(i);
 270                 }
 271             }
 272 
 273             // Allocate space only for the network type printers
 274             nameArray = env->NewObjectArray(remotePrintersCount, clazz, NULL);
 275             if (nameArray == NULL) {
 276                 throw std::bad_alloc();
 277             }
 278         } else {
 279             nameArray = NULL;
 280         }
 281 
 282         // Loop thro' network printers list only
 283         for (int i = 0; i < remotePrintersCount; i++) {
 284             PRINTER_INFO_4 *info4 = (PRINTER_INFO_4 *)
 285                 (pPrinterEnum + pNetworkPrinterLoc[i] * sizeof(PRINTER_INFO_4));
 286             utf_str = JNU_NewStringPlatform(env, info4->pPrinterName);
 287             if (utf_str == NULL) {
 288                 throw std::bad_alloc();
 289             }


< prev index next >