----------------------------
- Added `cupsDNSSD` APIs.
-- Added `cupsConcatString` and `cupsCopyString` string APIs.
+- Added `cupsConcatString`, `cupsCopyString`, and `cupsFormatString` string
+ APIs.
- Added new APIs for form, JSON, JWT, IPP, and raster setup.
- Added OpenSSL support for `cupsHashData` (Issue #762)
- Added warning if the device has to do IPP request for 'all,media-col-database'
numbers as strings instead of keywords as `InputSlot` values (Issue #859)
- Fixed IPP backend to support the "print-scaling" option with IPP printers
(Issue #862)
+- Fixed potential race condition for the creation of temporary queues
+ (Issue #871)
- Fixed Oki 407 freeze when printing larger jobs (Issue #877)
- Fixed checking for required attributes during PPD generation (Issue #890)
- Fixed pwg-raster-document-resolution-supported and urf-supported values
response = cupsDoRequest(http, request, "/");
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
+ {
cupsCopyString(uri, ippGetString(attr, 0, NULL), urisize);
+ }
else
{
ippDelete(response);
if ((printer = cupsdFindDest(name)) != NULL)
{
- send_ipp_status(con, IPP_STATUS_ERROR_NOT_POSSIBLE, _("Printer \"%s\" already exists."), name);
+ printer->state_time = time(NULL);
+ send_ipp_status(con, IPP_STATUS_OK, _("Printer \"%s\" already exists."), name);
goto add_printer_attributes;
}
+ for (printer = (cupsd_printer_t *)cupsArrayGetFirst(Printers); printer; printer = (cupsd_printer_t *)cupsArrayGetNext(Printers))
+ {
+ if (printer->device_uri && !strcmp(ptr, printer->device_uri))
+ {
+ printer->state_time = time(NULL);
+ send_ipp_status(con, IPP_STATUS_OK, _("Printer \"%s\" already exists."), printer->name);
+ goto add_printer_attributes;
+ }
+ }
+
/*
* Create the printer...
*/
"cupsdDeleteTemporaryPrinters: Removing unused temporary printers");
/*
- * Allow temporary printers to stick around for 60 seconds after the last job
+ * Allow temporary printers to stick around for 5 minutes after the last job
* completes.
*/
- unused_time = time(NULL) - 60;
+ unused_time = time(NULL) - 300;
for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers))
{