Skip to content

Commit 1165523

Browse files
committed
Report default media in media/-col/-ready (Issue #1388)
1 parent 7457bda commit 1165523

2 files changed

Lines changed: 62 additions & 11 deletions

File tree

CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ Changes in CUPS v2.5b1 (YYYY-MM-DD)
8484
values.
8585
- Updated the setuid/gid checks in libcups to use `getauxval` on Linux to avoid
8686
potential security issues (Issue #1258)
87+
- Updated the ready media support to report the default paper size/source/type
88+
from the PPD file (Issue #1388)
8789
- Deprecated the "page-border" Job Template attribute (Issue #1020)
8890
- Removed the `cups-config` utility (use `pkg-config` instead)
8991
- Fixed use-after-free in `cupsdAcceptClient()` when we log warning during error

scheduler/printers.c

Lines changed: 60 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3767,8 +3767,11 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
37673767
int xdpi, /* Horizontal resolution */
37683768
ydpi; /* Vertical resolution */
37693769
const char *resptr; /* Pointer into resolution keyword */
3770-
pwg_size_t *pwgsize; /* Current PWG size */
3771-
pwg_map_t *pwgsource, /* Current PWG source */
3770+
pwg_size_t *defsize = NULL, /* Default PWG size */
3771+
*pwgsize; /* Current PWG size */
3772+
pwg_map_t *defsource = NULL, /* Default PWG source */
3773+
*deftype = NULL, /* Default PWG type */
3774+
*pwgsource, /* Current PWG source */
37723775
*pwgtype; /* Current PWG type */
37733776
ipp_attribute_t *attr; /* Attribute data */
37743777
_ipp_value_t *val; /* Attribute value */
@@ -4300,23 +4303,21 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
43004303
*/
43014304

43024305
if ((size = ppdPageSize(ppd, NULL)) != NULL)
4303-
pwgsize = _ppdCacheGetSize(p->pc, size->name, size);
4306+
defsize = _ppdCacheGetSize(p->pc, size->name, size);
43044307
else
4305-
pwgsize = NULL;
4308+
defsize = NULL;
43064309

4307-
ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
4308-
"media-default", NULL,
4309-
pwgsize ? pwgsize->map.pwg : "unknown");
4310+
ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-default", NULL, defsize ? defsize->map.pwg : "unknown");
43104311

43114312
/*
43124313
* media-col-default
43134314
*/
43144315

4315-
if (pwgsize)
4316+
if (defsize)
43164317
{
43174318
ipp_t *col; /* Collection value */
43184319

4319-
col = new_media_col(pwgsize);
4320+
col = new_media_col(defsize);
43204321

43214322
if ((ppd_attr = ppdFindAttr(ppd, "DefaultMediaType", NULL)) != NULL)
43224323
{
@@ -4326,7 +4327,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
43264327
{
43274328
if (!strcmp(pwgtype->ppd, ppd_attr->value))
43284329
{
4329-
ippAddString(col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type", NULL, pwgtype->pwg);
4330+
deftype = pwgtype;
4331+
ippAddString(col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type", NULL, deftype->pwg);
43304332
break;
43314333
}
43324334
}
@@ -4340,7 +4342,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
43404342
{
43414343
if (!strcmp(pwgsource->ppd, ppd_attr->value))
43424344
{
4343-
ippAddString(col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source", NULL, pwgsource->pwg);
4345+
defsource = pwgsource;
4346+
ippAddString(col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source", NULL, defsource->pwg);
43444347
break;
43454348
}
43464349
}
@@ -4620,6 +4623,52 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
46204623
}
46214624
}
46224625

4626+
if (defsize)
4627+
{
4628+
// Add default size to media[-col]-ready as needed...
4629+
ipp_t *col = new_media_col(defsize);
4630+
// media-col-ready value
4631+
4632+
if (defsource)
4633+
{
4634+
ippAddString(col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source", NULL, defsource->pwg);
4635+
}
4636+
else if (media_col_ready)
4637+
{
4638+
char source[128]; // media-source value
4639+
4640+
snprintf(source, sizeof(source), "auto.%d", ippGetCount(media_col_ready) + 1);
4641+
ippAddString(col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source", NULL, source);
4642+
}
4643+
else
4644+
{
4645+
ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-source", NULL, "auto");
4646+
}
4647+
4648+
if (deftype)
4649+
ippAddString(col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type", NULL, deftype->pwg);
4650+
4651+
if (media_ready)
4652+
{
4653+
// Only add the default size if it isn't already in the ready list...
4654+
if (!ippContainsString(media_ready, defsize->map.pwg))
4655+
ippSetString(p->ppd_attrs, &media_ready, ippGetCount(media_ready), defsize->map.pwg);
4656+
}
4657+
else
4658+
{
4659+
// Add "media-ready"...
4660+
media_ready = ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-ready", NULL, defsize->map.pwg);
4661+
}
4662+
4663+
// Add/update media-col-ready...
4664+
if (media_col_ready)
4665+
ippSetCollection(p->ppd_attrs, &media_col_ready, ippGetCount(media_col_ready), col);
4666+
else
4667+
media_col_ready = ippAddCollection(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-ready", col);
4668+
4669+
ippDelete(col);
4670+
}
4671+
46234672
ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "mopria-certified", NULL, "1.3");
46244673

46254674
/*

0 commit comments

Comments
 (0)