summaryrefslogtreecommitdiff
path: root/usr.sbin/lpr/lpq
diff options
context:
space:
mode:
authorThorsten Lockert <tholo@cvs.openbsd.org>1996-07-04 05:41:58 +0000
committerThorsten Lockert <tholo@cvs.openbsd.org>1996-07-04 05:41:58 +0000
commit290fcc059d9fe17e7c22befa3c3615823eef59d6 (patch)
tree3d48e15674c15d481ba268cd05cf072f00a9aa21 /usr.sbin/lpr/lpq
parent73e06b23207009eef589976eeefda52b10cd5f05 (diff)
Integrated 4.4Lite2 source
Fixed potential problem pointed out by bitblt
Diffstat (limited to 'usr.sbin/lpr/lpq')
-rw-r--r--usr.sbin/lpr/lpq/lpq.112
-rw-r--r--usr.sbin/lpr/lpq/lpq.c63
2 files changed, 62 insertions, 13 deletions
diff --git a/usr.sbin/lpr/lpq/lpq.1 b/usr.sbin/lpr/lpq/lpq.1
index 50e1474121e..d5eadc581f8 100644
--- a/usr.sbin/lpr/lpq/lpq.1
+++ b/usr.sbin/lpr/lpq/lpq.1
@@ -29,9 +29,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" @(#)lpq.1 8.1 (Berkeley) 6/6/93
+.\" @(#)lpq.1 8.2 (Berkeley) 4/28/95
.\"
-.Dd June 6, 1993
+.Dd April 28, 1995
.Dt LPQ 1
.Os BSD 4.2
.Sh NAME
@@ -39,6 +39,7 @@
.Nd spool queue examination program
.Sh SYNOPSIS
.Nm lpq
+.OP Fl a
.Op Fl l
.Op Fl P Ns Ar printer
.Op job # ...
@@ -67,6 +68,9 @@ names or job numbers to filter out only those jobs of interest.
Information about each of the files comprising the job entry
is printed.
Normally, only as much information as will fit on one line is displayed.
+.It Fl a
+Report on the local queues for all printers,
+rather than just the specified printer.
.El
.Pp
For each job submitted (i.e. invocation of
@@ -102,7 +106,7 @@ If the following environment variable exists, it is used by
Specifies an alternate default printer.
.El
.Sh FILES
-.Bl -tag -width /usr/share/misc/termcap -compact
+.Bl -tag -width "/var/spool/*/lock" -compact
.It Pa /etc/printcap
To determine printer characteristics.
.It Pa /var/spool/*
@@ -111,8 +115,6 @@ The spooling directory, as determined from printcap.
Control files specifying jobs.
.It Pa /var/spool/*/lock
The lock file to obtain the currently active job.
-.It Pa /usr/share/misc/termcap
-For manipulating the screen for repeated display.
.El
.Sh SEE ALSO
.Xr lpr 1 ,
diff --git a/usr.sbin/lpr/lpq/lpq.c b/usr.sbin/lpr/lpq/lpq.c
index 02d25b3ca39..828e61badb5 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,6 +62,7 @@ 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 */
@@ -69,6 +71,7 @@ int users; /* # of users in user array */
uid_t uid, euid;
+static int ckqueue __P((char *));
void usage __P((void));
int
@@ -78,7 +81,8 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- int ch, lflag; /* long output option */
+ int ch, aflag, lflag;
+ char *buf, *cp;
euid = geteuid();
uid = getuid();
@@ -90,9 +94,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;
@@ -104,7 +111,7 @@ main(argc, argv)
usage();
}
- if (printer == NULL) {
+ if (!aflag && printer == NULL) {
char *p;
printer = DEFLP;
@@ -124,13 +131,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);
}