diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 1996-11-05 18:21:29 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 1996-11-05 18:21:29 +0000 |
commit | cfd268057fcb5adbebb5c1e7e64d3ba6d5d790c6 (patch) | |
tree | 3ca4abf892a60cd4652842aeafa8a59e0c734e33 /usr.sbin | |
parent | cf8ed42b7875619ae8f46578b5ffb08e5974eb46 (diff) |
lpr suite uses getcap(3) so this is never used!
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/lpr/common_source/printcap.c | 327 |
1 files changed, 0 insertions, 327 deletions
diff --git a/usr.sbin/lpr/common_source/printcap.c b/usr.sbin/lpr/common_source/printcap.c deleted file mode 100644 index 4a830884306..00000000000 --- a/usr.sbin/lpr/common_source/printcap.c +++ /dev/null @@ -1,327 +0,0 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -static char sccsid[] = "@(#)printcap.c 8.2 (Berkeley) 4/28/95"; -#endif /* not lint */ - -#include <sys/param.h> - -#include <fcntl.h> -#include <dirent.h> -#include <unistd.h> -#include <stdio.h> -#include <ctype.h> -#include <string.h> -#include "lp.h" -#include "pathnames.h" - -#ifndef BUFSIZ -#define BUFSIZ 1024 -#endif -#define MAXHOP 32 /* max number of tc= indirections */ - -/* - * printcap - routines for dealing with the printer capability data base - * - * BUG: Should use a "last" pointer in tbuf, so that searching - * for capabilities alphabetically would not be a n**2/2 - * process when large numbers of capabilities are given. - * Note: If we add a last pointer now we will screw up the - * tc capability. We really should compile printcap. - * - * Essentially all the work here is scanning and decoding escapes - * in string capabilities. We don't use stdio because the editor - * doesn't, and because living w/o it is not hard. - */ - -static FILE *pfp = NULL; /* printcap data base file pointer */ -static char *tbuf; -static int hopcount; /* detect infinite loops in printcap, init 0 */ -static int tf; - -char *pgetstr __P((char *, char **)); -static char *pskip __P((char *)); -static char *pdecode __P((char *, char **)); - -/* - * Similar to tgetent except it returns the next entry instead of - * doing a lookup. - */ -int -getprent(bp) - register char *bp; -{ - register int c, skip = 0; - - if (pfp == NULL) { - seteuid(euid); - pfp = fopen(_PATH_PRINTCAP, "r"); - seteuid(uid); - if (pfp == NULL) - return(-1); - } - - tbuf = bp; - for (;;) { - switch (c = getc(pfp)) { - case EOF: - fclose(pfp); - pfp = NULL; - return(0); - case '\n': - if (bp == tbuf) { - skip = 0; - continue; - } - if (bp[-1] == '\\') { - bp--; - continue; - } - *bp = '\0'; - return(1); - case '#': - if (bp == tbuf) - skip++; - default: - if (skip) - continue; - if (bp >= tbuf+BUFSIZ) { - write(2, "Printcap entry too long\n", 23); - *bp = '\0'; - return(1); - } - *bp++ = c; - } - } -} - -void -endprent() -{ - if (pfp != NULL) { - /* - * Can't use fclose here because on POSIX-compliant - * systems, fclose() causes the file pointer of the - * underlying file descriptor (which is possibly shared - * with a parent process) to be adjusted, and this - * reeks havoc in the parent because it doesn't know - * the file pointer has changed. - */ - (void) close(fileno(pfp)); - pfp = NULL; - } -} - -/* - * Pnamatch deals with name matching. The first field of the printcap - * entry is a sequence of names separated by |'s, so we compare - * against each such name. The normal : terminator after the last - * name (before the first field) stops us. - */ -int -pnamatch(np) - char *np; -{ - register char *Np, *Bp; - - Bp = tbuf; - if (*Bp == '#') - return(0); - for (;;) { - for (Np = np; *Np && *Bp == *Np; Bp++, Np++) - continue; - if (*Np == 0 && (*Bp == '|' || *Bp == ':' || *Bp == 0)) - return (1); - while (*Bp && *Bp != ':' && *Bp != '|') - Bp++; - if (*Bp == 0 || *Bp == ':') - return (0); - Bp++; - } -} - -/* - * Skip to the next field. Notice that this is very dumb, not - * knowing about \: escapes or any such. If necessary, :'s can be put - * into the printcap file in octal. - */ -static char * -pskip(bp) - register char *bp; -{ - - while (*bp && *bp != ':') - bp++; - if (*bp == ':') - bp++; - return (bp); -} - -/* - * Return the (numeric) option id. - * Numeric options look like - * li#80 - * i.e. the option string is separated from the numeric value by - * a # character. If the option is not found we return -1. - * Note that we handle octal numbers beginning with 0. - */ -int -pgetnum(id) - char *id; -{ - register int i, base; - register char *bp = tbuf; - - for (;;) { - bp = pskip(bp); - if (*bp == 0) - return (-1); - if (*bp++ != id[0] || *bp == 0 || *bp++ != id[1]) - continue; - if (*bp == '@') - return(-1); - if (*bp != '#') - continue; - bp++; - base = 10; - if (*bp == '0') - base = 8; - i = 0; - while (isdigit(*bp)) - i *= base, i += *bp++ - '0'; - return (i); - } -} - -/* - * Handle a flag option. - * Flag options are given "naked", i.e. followed by a : or the end - * of the buffer. Return 1 if we find the option, or 0 if it is - * not given. - */ -int -pgetflag(id) - char *id; -{ - register char *bp = tbuf; - - for (;;) { - bp = pskip(bp); - if (!*bp) - return (0); - if (*bp++ == id[0] && *bp != 0 && *bp++ == id[1]) { - if (!*bp || *bp == ':') - return (1); - else if (*bp == '@') - return(0); - } - } -} - -/* - * Get a string valued option. - * These are given as - * cl=^Z - * Much decoding is done on the strings, and the strings are - * placed in area, which is a ref parameter which is updated. - * No checking on area overflow. - */ -char * -pgetstr(id, area) - char *id, **area; -{ - register char *bp = tbuf; - - for (;;) { - bp = pskip(bp); - if (!*bp) - return (0); - if (*bp++ != id[0] || *bp == 0 || *bp++ != id[1]) - continue; - if (*bp == '@') - return(0); - if (*bp != '=') - continue; - bp++; - return (pdecode(bp, area)); - } -} - -/* - * Pdecode does the grung work to decode the - * string capability escapes. - */ -static char * -pdecode(str, area) - register char *str; - char **area; -{ - register char *cp; - register int c; - register char *dp; - int i; - - cp = *area; - while ((c = *str++) && c != ':') { - switch (c) { - - case '^': - c = *str++ & 037; - break; - - case '\\': - dp = "E\033^^\\\\::n\nr\rt\tb\bf\f"; - c = *str++; -nextc: - if (*dp++ == c) { - c = *dp++; - break; - } - dp++; - if (*dp) - goto nextc; - if (isdigit(c)) { - c -= '0', i = 2; - do - c <<= 3, c |= *str++ - '0'; - } - break; - } - *cp++ = c; - } - *cp++ = 0; - str = *area; - *area = cp; - return (str); -} |