summaryrefslogtreecommitdiffstats
path: root/usr.sbin/lpr/lpq/lpq.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/lpr/lpq/lpq.c')
-rw-r--r--usr.sbin/lpr/lpq/lpq.c63
1 files changed, 55 insertions, 8 deletions
diff --git a/usr.sbin/lpr/lpq/lpq.c b/usr.sbin/lpr/lpq/lpq.c
index b091e8e..7d1b520 100644
--- a/usr.sbin/lpr/lpq/lpq.c
+++ b/usr.sbin/lpr/lpq/lpq.c
@@ -39,14 +39,15 @@ static char copyright[] =
#endif /* not lint */
#ifndef lint
-static char sccsid[] = "@(#)lpq.c 8.1 (Berkeley) 6/6/93";
+static char sccsid[] = "@(#)lpq.c 8.3 (Berkeley) 5/10/95";
#endif /* not lint */
/*
* Spool Queue examination program
*
- * lpq [-l] [-Pprinter] [user...] [job...]
+ * lpq [-a] [-l] [-Pprinter] [user...] [job...]
*
+ * -a show all non-null queues on the local machine
* -l long output
* -P used to identify printer as per lpr/lprm
*/
@@ -61,12 +62,14 @@ static char sccsid[] = "@(#)lpq.c 8.1 (Berkeley) 6/6/93";
#include <ctype.h>
#include "lp.h"
#include "lp.local.h"
+#include "pathnames.h"
int requ[MAXREQUESTS]; /* job number of spool entries */
int requests; /* # of spool requests */
char *user[MAXUSERS]; /* users to process */
int users; /* # of users in user array */
+static int ckqueue __P((char *));
void usage __P((void));
int
@@ -76,7 +79,8 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- int ch, lflag; /* long output option */
+ int ch, aflag, lflag;
+ char *buf, *cp;
name = *argv;
if (gethostname(host, sizeof(host))) {
@@ -85,9 +89,12 @@ main(argc, argv)
}
openlog("lpd", 0, LOG_LPR);
- lflag = 0;
- while ((ch = getopt(argc, argv, "lP:")) != EOF)
+ aflag = lflag = 0;
+ while ((ch = getopt(argc, argv, "alP:")) != EOF)
switch((char)ch) {
+ case 'a':
+ ++aflag;
+ break;
case 'l': /* long output */
++lflag;
break;
@@ -99,7 +106,7 @@ main(argc, argv)
usage();
}
- if (printer == NULL && (printer = getenv("PRINTER")) == NULL)
+ if (!aflag && printer == NULL && (printer = getenv("PRINTER")) == NULL)
printer = DEFLP;
for (argc -= optind, argv += optind; argc; --argc, ++argv)
@@ -114,13 +121,53 @@ main(argc, argv)
user[users++] = *argv;
}
- displayq(lflag);
+ if (aflag) {
+ while (cgetnext(&buf, printcapdb) > 0) {
+ if (ckqueue(buf) <= 0) {
+ free(buf);
+ continue; /* no jobs */
+ }
+ for (cp = buf; *cp; cp++)
+ if (*cp == '|' || *cp == ':') {
+ *cp = '\0';
+ break;
+ }
+ printer = buf;
+ printf("%s:\n", printer);
+ displayq(lflag);
+ free(buf);
+ printf("\n");
+ }
+ } else
+ displayq(lflag);
exit(0);
}
+static int
+ckqueue(cap)
+ char *cap;
+{
+ register struct dirent *d;
+ DIR *dirp;
+ char *spooldir;
+
+ if (cgetstr(cap, "sd", &spooldir) == -1)
+ spooldir = _PATH_DEFSPOOL;
+ if ((dirp = opendir(spooldir)) == NULL)
+ return (-1);
+ while ((d = readdir(dirp)) != NULL) {
+ if (d->d_name[0] != 'c' || d->d_name[1] != 'f')
+ continue; /* daemon control files only */
+ closedir(dirp);
+ return (1); /* found something */
+ }
+ closedir(dirp);
+ return (0);
+}
+
void
usage()
{
- puts("usage: lpq [-l] [-Pprinter] [user ...] [job ...]");
+ puts("usage: lpq [-a] [-l] [-Pprinter] [user ...] [job ...]");
exit(1);
}
OpenPOWER on IntegriCloud