/*
- * "$Id: lp.c 7170 2008-01-04 02:21:30Z mike $"
+ * "$Id: lp.c 11101 2013-07-08 11:20:33Z msweet $"
*
- * "lp" command for the Common UNIX Printing System (CUPS).
+ * "lp" command for CUPS.
*
- * Copyright 2007 by Apple Inc.
+ * Copyright 2007-2013 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* Include necessary headers...
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <cups/string.h>
-#include <cups/cups.h>
-#include <cups/i18n.h>
+#include <cups/cups-private.h>
/*
int i, j; /* Looping vars */
int job_id; /* Job ID */
char *printer, /* Printer name */
- *instance, /* Instance name */
+ *instance, /* Instance name */
*val, /* Option value */
*title; /* Job title */
int priority; /* Job priority (1-100) */
#ifdef HAVE_SSL
cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
#else
- _cupsLangPrintf(stderr,
- _("%s: Sorry, no encryption support compiled in!\n"),
+ _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."),
argv[0]);
#endif /* HAVE_SSL */
break;
if (i >= argc)
{
_cupsLangPrintf(stderr,
- _("%s: Error - expected username after "
- "\'-U\' option!\n"),
- argv[0]);
+ _("%s: Error - expected username after \"-U\" "
+ "option."), argv[0]);
return (1);
}
cupsSetUser(argv[i]);
}
break;
-
+
case 'c' : /* Copy to spool dir (always enabled) */
break;
{
_cupsLangPrintf(stderr,
_("%s: Error - expected destination after "
- "\'-d\' option!\n"),
- argv[0]);
+ "\"-d\" option."), argv[0]);
return (1);
}
if ((instance = strrchr(printer, '/')) != NULL)
*instance++ = '\0';
- if ((dest = cupsGetNamedDest(NULL, printer, instance)) != NULL)
+ if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, printer,
+ instance)) != NULL)
{
for (j = 0; j < dest->num_options; j ++)
- if (cupsGetOption(dest->options[j].name, num_options, options) == NULL)
+ if (cupsGetOption(dest->options[j].name, num_options,
+ options) == NULL)
num_options = cupsAddOption(dest->options[j].name,
dest->options[j].value,
num_options, &options);
}
+ else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
+ cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - add '/version=1.1' to server "
+ "name."), argv[0]);
+ return (1);
+ }
break;
case 'f' : /* Form */
if (i >= argc)
{
_cupsLangPrintf(stderr,
- _("%s: Error - expected form after \'-f\' "
- "option!\n"),
+ _("%s: Error - expected form after \"-f\" "
+ "option."),
argv[0]);
return (1);
}
}
- _cupsLangPrintf(stderr, _("%s: Warning - form option ignored!\n"),
+ _cupsLangPrintf(stderr, _("%s: Warning - form option ignored."),
argv[0]);
break;
{
_cupsLangPrintf(stderr,
_("%s: Error - expected hostname after "
- "\'-h\' option!\n"),
- argv[0]);
+ "\"-h\" option."), argv[0]);
return (1);
}
if (i >= argc)
{
_cupsLangPrintf(stderr,
- _("%s: Expected job ID after \'-i\' option!\n"),
+ _("%s: Expected job ID after \"-i\" option."),
argv[0]);
return (1);
}
{
_cupsLangPrintf(stderr,
_("%s: Error - cannot print files and alter "
- "jobs simultaneously!\n"),
- argv[0]);
+ "jobs simultaneously."), argv[0]);
return (1);
}
if (job_id < 0)
{
- _cupsLangPrintf(stderr, _("%s: Error - bad job ID!\n"), argv[0]);
+ _cupsLangPrintf(stderr, _("%s: Error - bad job ID."), argv[0]);
break;
}
break;
{
_cupsLangPrintf(stderr,
_("%s: Error - expected copies after "
- "\'-n\' option!\n"),
- argv[0]);
+ "\"-n\" option."), argv[0]);
return (1);
}
}
sprintf(buffer, "%d", num_copies);
- num_options = cupsAddOption("copies", buffer, num_options, &options);
+ num_options = cupsAddOption("copies", buffer, num_options,
+ &options);
break;
case 'o' : /* Option */
if (argv[i][2] != '\0')
- num_options = cupsParseOptions(argv[i] + 2, num_options, &options);
+ num_options = cupsParseOptions(argv[i] + 2, num_options,
+ &options);
else
{
i ++;
if (i >= argc)
{
_cupsLangPrintf(stderr,
- _("%s: Error - expected option string after "
- "\'-o\' option!\n"),
- argv[0]);
+ _("%s: Error - expected option=value after "
+ "\"-o\" option."), argv[0]);
return (1);
}
{
_cupsLangPrintf(stderr,
_("%s: Error - expected priority after "
- "\'-%c\' option!\n"),
- argv[0], argv[i][1]);
+ "\"-%c\" option."), argv[0], argv[i][1]);
return (1);
}
{
_cupsLangPrintf(stderr,
_("%s: Error - priority must be between 1 and "
- "100.\n"),
- argv[0]);
+ "100."), argv[0]);
return (1);
}
sprintf(buffer, "%d", priority);
- num_options = cupsAddOption("job-priority", buffer, num_options, &options);
+ num_options = cupsAddOption("job-priority", buffer, num_options,
+ &options);
break;
case 's' : /* Silent */
{
_cupsLangPrintf(stderr,
_("%s: Error - expected title after "
- "\'-t\' option!\n"),
- argv[0]);
+ "\"-t\" option."), argv[0]);
return (1);
}
{
_cupsLangPrintf(stderr,
_("%s: Error - expected mode list after "
- "\'-y\' option!\n"),
- argv[0]);
+ "\"-y\" option."), argv[0]);
return (1);
}
}
_cupsLangPrintf(stderr,
- _("%s: Warning - mode option ignored!\n"),
- argv[0]);
+ _("%s: Warning - mode option ignored."), argv[0]);
break;
case 'H' : /* Hold job */
{
_cupsLangPrintf(stderr,
_("%s: Error - expected hold name after "
- "\'-H\' option!\n"),
- argv[0]);
+ "\"-H\" option."), argv[0]);
return (1);
}
num_options = cupsAddOption("job-hold-until", "no-hold",
num_options, &options);
else if (!strcmp(val, "immediate"))
+ {
+ num_options = cupsAddOption("job-hold-until", "no-hold",
+ num_options, &options);
num_options = cupsAddOption("job-priority", "100",
num_options, &options);
+ }
else if (!strcmp(val, "restart"))
{
if (job_id < 1)
{
_cupsLangPrintf(stderr,
- _("%s: Need job ID (\'-i jobid\') before "
- "\'-H restart\'!\n"),
- argv[0]);
+ _("%s: Need job ID (\"-i jobid\") before "
+ "\"-H restart\"."), argv[0]);
return (1);
}
{
_cupsLangPrintf(stderr,
_("%s: Error - expected page list after "
- "\'-P\' option!\n"),
- argv[0]);
+ "\"-P\" option."), argv[0]);
return (1);
}
{
_cupsLangPrintf(stderr,
_("%s: Error - expected character set after "
- "\'-S\' option!\n"),
- argv[0]);
+ "\"-S\" option."), argv[0]);
return (1);
}
}
_cupsLangPrintf(stderr,
- _("%s: Warning - character set option ignored!\n"),
+ _("%s: Warning - character set option ignored."),
argv[0]);
break;
{
_cupsLangPrintf(stderr,
_("%s: Error - expected content type after "
- "\'-T\' option!\n"),
- argv[0]);
+ "\"-T\" option."), argv[0]);
return (1);
}
}
_cupsLangPrintf(stderr,
- _("%s: Warning - content type option ignored!\n"),
+ _("%s: Warning - content type option ignored."),
argv[0]);
break;
case '-' : /* Stop processing options */
+ if (argv[i][2])
+ {
+ _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%s\"."),
+ argv[0], argv[i]);
+ return (1);
+ }
+
end_options = 1;
break;
default :
- _cupsLangPrintf(stderr, _("%s: Error - unknown option \'%c\'!\n"),
+ _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."),
argv[0], argv[i][1]);
return (1);
}
{
_cupsLangPrintf(stderr,
_("%s: Error - cannot print from stdin if files or a "
- "job ID are provided!\n"),
- argv[0]);
+ "job ID are provided."), argv[0]);
return (1);
}
if (access(argv[i], R_OK) != 0)
{
- _cupsLangPrintf(stderr, _("%s: Error - unable to access \"%s\" - %s\n"),
+ _cupsLangPrintf(stderr, _("%s: Error - unable to access \"%s\" - %s"),
argv[0], argv[i], strerror(errno));
return (1);
}
}
}
else
- _cupsLangPrintf(stderr, _("%s: Error - too many files - \"%s\"\n"),
+ _cupsLangPrintf(stderr, _("%s: Error - too many files - \"%s\"."),
argv[0], argv[i]);
/*
dest->options[j].value,
num_options, &options);
}
+ else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
+ cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - add '/version=1.1' to server "
+ "name."), argv[0]);
+ return (1);
+ }
}
if (printer == NULL)
if (printer && !cupsGetNamedDest(NULL, printer, NULL))
_cupsLangPrintf(stderr,
_("%s: Error - %s environment variable names "
- "non-existent destination \"%s\"!\n"),
- argv[0], val, printer);
+ "non-existent destination \"%s\"."), argv[0], val,
+ printer);
else if (cupsLastError() == IPP_NOT_FOUND)
_cupsLangPrintf(stderr,
- _("%s: Error - no default destination available.\n"),
+ _("%s: Error - no default destination available."),
argv[0]);
else
- _cupsLangPrintf(stderr,
- _("%s: Error - scheduler not responding!\n"),
+ _cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."),
argv[0]);
return (1);
const char *format; /* Document format */
ssize_t bytes; /* Bytes read */
-
if (cupsGetOption("raw", num_options, options))
format = CUPS_FORMAT_RAW;
else if ((format = cupsGetOption("document-format", num_options,
if (status != HTTP_CONTINUE)
{
- _cupsLangPrintf(stderr,
- _("%s: Error - unable to queue from stdin - %s\n"),
+ _cupsLangPrintf(stderr, _("%s: Error - unable to queue from stdin - %s."),
argv[0], httpStatus(status));
+ cupsFinishDocument(CUPS_HTTP_DEFAULT, printer);
+ cupsCancelJob2(CUPS_HTTP_DEFAULT, printer, job_id, 0);
return (1);
}
if (cupsFinishDocument(CUPS_HTTP_DEFAULT, printer) != IPP_OK)
- job_id = 0;
+ {
+ _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString());
+ cupsCancelJob2(CUPS_HTTP_DEFAULT, printer, job_id, 0);
+ return (1);
+ }
}
if (job_id < 1)
{
- _cupsLangPrintf(stderr, "%s: %s\n", argv[0], cupsLastErrorString());
+ _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString());
return (1);
}
else if (!silent)
- _cupsLangPrintf(stdout, _("request id is %s-%d (%d file(s))\n"),
+ _cupsLangPrintf(stdout, _("request id is %s-%d (%d file(s))"),
printer, job_id, num_files);
return (0);
ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/jobs"));
- if (cupsLastError() > IPP_OK_CONFLICT)
+ if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
+ cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - add '/version=1.1' to server "
+ "name."), command);
+ return (1);
+ }
+ else if (cupsLastError() > IPP_OK_CONFLICT)
{
- _cupsLangPrintf(stderr, "%s: %s\n", command, cupsLastErrorString());
+ _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString());
return (1);
}
ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/jobs"));
- if (cupsLastError() > IPP_OK_CONFLICT)
+ if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
+ cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - add '/version=1.1' to server "
+ "name."), command);
+ return (1);
+ }
+ else if (cupsLastError() > IPP_OK_CONFLICT)
{
- _cupsLangPrintf(stderr, "%s: %s\n", command, cupsLastErrorString());
+ _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString());
return (1);
}
/*
- * End of "$Id: lp.c 7170 2008-01-04 02:21:30Z mike $".
+ * End of "$Id: lp.c 11101 2013-07-08 11:20:33Z msweet $".
*/