diff options
author | Denis Vlasenko | 2008-02-24 18:44:20 +0000 |
---|---|---|
committer | Denis Vlasenko | 2008-02-24 18:44:20 +0000 |
commit | 4f82bdb050024b3475f5371a0612b1fb0fc4c09f (patch) | |
tree | ba0f2f986546c7798553f76c305f052b2b190048 /printutils/lpq.c | |
parent | 52feee9b1fc996acb9c2857596bc5c2440644525 (diff) | |
download | busybox-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.c | 108 |
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; -} |