version 1.5, 1995/11/15 22:48:10 |
version 1.6, 1997/10/05 11:52:38 |
Line 40 static char copyright[] = |
|
Line 40 static char copyright[] = |
|
#endif /* not lint */ |
#endif /* not lint */ |
|
|
#ifndef 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 */ |
#endif /* not lint */ |
|
|
/* |
/* |
* Spool Queue examination program |
* 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 |
* -l long output |
* -P used to identify printer as per lpr/lprm |
* -P used to identify printer as per lpr/lprm |
*/ |
*/ |
Line 62 static char sccsid[] = "@(#)lpq.c 8.1 (B |
|
Line 63 static char sccsid[] = "@(#)lpq.c 8.1 (B |
|
#include <ctype.h> |
#include <ctype.h> |
#include "lp.h" |
#include "lp.h" |
#include "lp.local.h" |
#include "lp.local.h" |
|
#include "pathnames.h" |
|
|
int requ[MAXREQUESTS]; /* job number of spool entries */ |
int requ[MAXREQUESTS]; /* job number of spool entries */ |
int requests; /* # of spool requests */ |
int requests; /* # of spool requests */ |
char *user[MAXUSERS]; /* users to process */ |
char *user[MAXUSERS]; /* users to process */ |
int users; /* # of users in user array */ |
int users; /* # of users in user array */ |
|
|
uid_t uid, euid; |
uid_t uid, euid; |
|
|
|
static int ckqueue __P((char *)); |
void usage __P((void)); |
void usage __P((void)); |
|
|
int |
int |
|
|
{ |
{ |
extern char *optarg; |
extern char *optarg; |
extern int optind; |
extern int optind; |
int ch, lflag; /* long output option */ |
int ch, aflag, lflag; |
|
char *buf, *cp; |
|
|
euid = geteuid(); |
euid = geteuid(); |
uid = getuid(); |
uid = getuid(); |
|
|
} |
} |
openlog("lpd", 0, LOG_LPR); |
openlog("lpd", 0, LOG_LPR); |
|
|
lflag = 0; |
aflag = lflag = 0; |
while ((ch = getopt(argc, argv, "lP:")) != EOF) |
while ((ch = getopt(argc, argv, "alP:")) != EOF) |
switch((char)ch) { |
switch((char)ch) { |
|
case 'a': |
|
++aflag; |
|
break; |
case 'l': /* long output */ |
case 'l': /* long output */ |
++lflag; |
++lflag; |
break; |
break; |
Line 105 main(argc, argv) |
|
Line 111 main(argc, argv) |
|
usage(); |
usage(); |
} |
} |
|
|
if (printer == NULL && (printer = getenv("PRINTER")) == NULL) |
if (!aflag && printer == NULL && (printer = getenv("PRINTER")) == NULL) |
printer = DEFLP; |
printer = DEFLP; |
|
|
for (argc -= optind, argv += optind; argc; --argc, ++argv) |
for (argc -= optind, argv += optind; argc; --argc, ++argv) |
Line 120 main(argc, argv) |
|
Line 126 main(argc, argv) |
|
user[users++] = *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); |
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 |
void |
usage() |
usage() |
{ |
{ |
puts("usage: lpq [-l] [-Pprinter] [user ...] [job ...]"); |
puts("usage: lpq [-a] [-l] [-Pprinter] [user ...] [job ...]"); |
exit(1); |
exit(1); |
} |
} |