/*
- * "$Id: lprm.c 7261 2008-01-28 23:09:31Z mike $"
+ * "lprm" command for CUPS.
*
- * "lprm" command for the Common UNIX Printing System (CUPS).
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2006 by Easy Software Products.
*
- * Copyright 2007-2009 by Apple Inc.
- * Copyright 1997-2006 by Easy Software Products.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * which should have been included with this file. If this file is
- * file is missing or damaged, see the license at "http://www.cups.org/".
- *
- * Contents:
- *
- * main() - Parse options and cancel jobs.
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more
+ * information.
*/
/*
* Include necessary headers...
*/
-#include <stdio.h>
-#include <stdlib.h>
+#include <cups/cups-private.h>
+
-#include <cups/cups.h>
-#include <cups/i18n.h>
-#include <cups/string.h>
+/*
+ * Local functions...
+ */
+
+static void usage(void) _CUPS_NORETURN;
/*
int i; /* Looping var */
int job_id; /* Job ID */
const char *name; /* Destination printer */
- char *instance; /* Pointer to instance name */
+ char *instance, /* Pointer to instance name */
+ *opt; /* Option pointer */
cups_dest_t *dest, /* Destination */
*defdest; /* Default destination */
int did_cancel; /* Did we cancel something? */
*/
for (i = 1; i < argc; i ++)
- if (argv[i][0] == '-' && argv[i][1] != '\0')
- switch (argv[i][1])
+ {
+ if (!strcmp(argv[i], "--help"))
+ usage();
+ else if (argv[i][0] == '-' && argv[i][1] != '\0')
+ {
+ for (opt = argv[i] + 1; *opt; opt ++)
{
- case 'E' : /* Encrypt */
+ switch (*opt)
+ {
+ case 'E' : /* Encrypt */
#ifdef HAVE_SSL
- cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
+ cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
#else
- _cupsLangPrintf(stderr,
- _("%s: Sorry, no encryption support compiled in\n"),
- argv[0]);
+ _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]);
#endif /* HAVE_SSL */
- break;
-
- case 'P' : /* Cancel jobs on a printer */
- if (argv[i][2])
- name = argv[i] + 2;
- else
- {
- i ++;
- name = argv[i];
- }
-
- if ((instance = strchr(name, '/')) != NULL)
- *instance = '\0';
-
- if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name,
- NULL)) == NULL)
- {
- _cupsLangPrintf(stderr,
- _("%s: Error - unknown destination \"%s\"\n"),
- argv[0], name);
- goto error;
- }
-
- cupsFreeDests(1, dest);
- break;
-
- case 'U' : /* Username */
- if (argv[i][2] != '\0')
- cupsSetUser(argv[i] + 2);
- else
- {
- i ++;
- if (i >= argc)
+ break;
+
+ case 'P' : /* Cancel jobs on a printer */
+ if (opt[1] != '\0')
+ {
+ name = opt + 1;
+ opt += strlen(opt) - 1;
+ }
+ else
{
- _cupsLangPrintf(stderr,
- _("%s: Error - expected username after "
- "\'-U\' option\n"),
- argv[0]);
- goto error;
+ i ++;
+ name = argv[i];
}
- cupsSetUser(argv[i]);
- }
- break;
-
- case 'h' : /* Connect to host */
- if (argv[i][2] != '\0')
- cupsSetServer(argv[i] + 2);
- else
- {
- i ++;
-
- if (i >= argc)
+ if ((instance = strchr(name, '/')) != NULL)
+ *instance = '\0';
+
+ if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name, NULL)) == NULL)
{
- _cupsLangPrintf(stderr,
- _("%s: Error - expected hostname after "
- "\'-h\' option\n"),
- argv[0]);
+ _cupsLangPrintf(stderr, _("%s: Error - unknown destination \"%s\"."), argv[0], name);
goto error;
- }
+ }
+
+ cupsFreeDests(1, dest);
+ break;
+
+ case 'U' : /* Username */
+ if (opt[1] != '\0')
+ {
+ cupsSetUser(opt + 1);
+ opt += strlen(opt) - 1;
+ }
else
- cupsSetServer(argv[i]);
- }
+ {
+ i ++;
+ if (i >= argc)
+ {
+ _cupsLangPrintf(stderr, _("%s: Error - expected username after \"-U\" option."), argv[0]);
+ usage();
+ }
+
+ cupsSetUser(argv[i]);
+ }
+ break;
- if (defdest)
- cupsFreeDests(1, defdest);
+ case 'h' : /* Connect to host */
+ if (opt[1] != '\0')
+ {
+ cupsSetServer(opt + 1);
+ opt += strlen(opt) - 1;
+ }
+ else
+ {
+ i ++;
+
+ if (i >= argc)
+ {
+ _cupsLangPrintf(stderr, _("%s: Error - expected hostname after \"-h\" option."), argv[0]);
+ usage();
+ }
+ else
+ cupsSetServer(argv[i]);
+ }
- defdest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL);
- name = defdest ? defdest->name : NULL;
- break;
+ if (defdest)
+ cupsFreeDests(1, defdest);
- default :
- _cupsLangPrintf(stderr,
- _("%s: Error - unknown option \'%c\'\n"),
- argv[0], argv[i][1]);
- goto error;
+ defdest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL);
+ name = defdest ? defdest->name : NULL;
+ break;
+
+ default :
+ _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."), argv[0], *opt);
+ usage();
+ }
}
+ }
else
{
/*
}
else
{
- _cupsLangPrintf(stderr,
- _("%s: Error - unknown destination \"%s\"\n"),
+ _cupsLangPrintf(stderr, _("%s: Error - unknown destination \"%s\"."),
argv[0], argv[i]);
goto error;
}
if (cupsCancelJob2(CUPS_HTTP_DEFAULT, name, job_id, 0) != IPP_OK)
{
- _cupsLangPrintf(stderr, "%s: %s\n", argv[0], cupsLastErrorString());
+ _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString());
goto error;
}
did_cancel = 1;
}
+ }
/*
* If nothing has been canceled yet, cancel the current job on the specified
if (!did_cancel && cupsCancelJob2(CUPS_HTTP_DEFAULT, name, 0, 0) != IPP_OK)
{
- _cupsLangPrintf(stderr, "%s: %s\n", argv[0], cupsLastErrorString());
+ _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString());
goto error;
}
/*
- * End of "$Id: lprm.c 7261 2008-01-28 23:09:31Z mike $".
+ * 'usage()' - Show program usage and exit.
*/
+
+static void
+usage(void)
+{
+ _cupsLangPuts(stdout, _("Usage: lprm [options] [id]\n"
+ " lprm [options] -"));
+ _cupsLangPuts(stdout, _("Options:"));
+ _cupsLangPuts(stdout, _("- Cancel all jobs"));
+ _cupsLangPuts(stdout, _("-E Encrypt the connection to the server"));
+ _cupsLangPuts(stdout, _("-h server[:port] Connect to the named server and port"));
+ _cupsLangPuts(stdout, _("-P destination Specify the destination"));
+ _cupsLangPuts(stdout, _("-U username Specify the username to use for authentication"));
+
+ exit(1);
+}