summaryrefslogtreecommitdiff
path: root/printutils/lpq.c
diff options
context:
space:
mode:
authorDenis Vlasenko2008-02-24 18:44:20 +0000
committerDenis Vlasenko2008-02-24 18:44:20 +0000
commit4f82bdb050024b3475f5371a0612b1fb0fc4c09f (patch)
treeba0f2f986546c7798553f76c305f052b2b190048 /printutils/lpq.c
parent52feee9b1fc996acb9c2857596bc5c2440644525 (diff)
downloadbusybox-4f82bdb050024b3475f5371a0612b1fb0fc4c09f.zip
busybox-4f82bdb050024b3475f5371a0612b1fb0fc4c09f.tar.gz
lpr,lpq: rework by dronnikov AT gmail.com
Diffstat (limited to 'printutils/lpq.c')
-rw-r--r--printutils/lpq.c108
1 files changed, 0 insertions, 108 deletions
diff --git a/printutils/lpq.c b/printutils/lpq.c
deleted file mode 100644
index ce9a10c..0000000
--- a/printutils/lpq.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/*
- * Copyright 2008 Walter Harms (WHarms@bfs.de)
- *
- * Licensed under the GPL v2, see the file LICENSE in this tarball.
- */
-#include "libbb.h"
-#include "lpr.h"
-
-/*
- this is a *very* resticted form of lpq
- since we do not read /etc/printcap (and never will)
- we can only do things rfc1179 allows:
- - show print jobs for a given queue long/short form
- - remove a job from a given queue
-
- -P <queue>
- -s short
- -d delete job
- -f force any waiting job to be printed
-*/
-enum {
- LPQ_SHORT = 1 << 0,
- LPQ_DELETE = 1 << 1,
- LPQ_FORCE = 1 << 2,
- LPQ_P = 1 << 3,
- LPQ_t = 1 << 4,
-};
-
-/*
- print everthing that comes
-*/
-static void get_answer(int sockfd)
-{
- char buf[80];
- int n;
-
- buf[0] = '\n';
- while (1) {
- n = safe_read(sockfd, buf, sizeof(buf));
- if (n <= 0)
- break;
- full_write(STDOUT_FILENO, buf, n);
- buf[0] = buf[n-1]; /* last written char */
- }
-
- /* Don't leave last output line unterminated */
- if (buf[0] != '\n')
- full_write(STDOUT_FILENO, "\n", 1);
-}
-
-/*
- is this too simple ?
- should we support more ENV ?
- PRINTER, LPDEST, NPRINTER, NGPRINTER
-*/
-int lpq_main(int argc, char *argv[]) MAIN_EXTERNALLY_VISIBLE;
-int lpq_main(int argc, char *argv[])
-{
- struct netprint netprint;
- const char *netopt;
- const char *delopt = "0";
- int sockfd = sockfd; /* for compiler */
- unsigned opt;
- int delay; /* delay in [s] */
-
- netopt = NULL;
- opt = getopt32(argv, "sdfP:t:", &netopt, &delopt);
- argv += optind;
- delay = xatoi_u(delopt);
- parse_prt(netopt, &netprint);
-
- /* do connect */
- if (opt & (LPQ_FORCE|LPQ_DELETE))
- sockfd = xconnect_stream(netprint.lsa);
-
- /* force printing of every job still in queue */
- if (opt & LPQ_FORCE) {
- fdprintf(sockfd, "\x1" "%s", netprint.queue);
- get_answer(sockfd);
- return EXIT_SUCCESS;
- }
-
- /* delete job (better a list of jobs). username is now LOGNAME */
- if (opt & LPQ_DELETE) {
- while (*argv) {
- fdprintf(sockfd, "\x5" "%s %s %s",
- netprint.queue,
- getenv("LOGNAME"), /* FIXME - may be NULL? */
- *argv);
- get_answer(sockfd);
- argv++;
- }
- return EXIT_SUCCESS;
- }
-
- do {
- sockfd = xconnect_stream(netprint.lsa);
- fdprintf(sockfd, "%c%s\n", (opt & LPQ_SHORT) ? 3 : 4,
- netprint.queue);
-
- get_answer(sockfd);
- close(sockfd);
- sleep(delay);
- } while (delay != 0);
-
- return EXIT_SUCCESS;
-}