source: trunk/minix/commands/simple/lp.c@ 20

Last change on this file since 20 was 9, checked in by Mattia Monga, 14 years ago

Minix 3.1.2a

File size: 1.7 KB
Line 
1/* lp 1.4 - Send file to the lineprinter Author: Kees J. Bot
2 * 3 Dec 1989
3 */
4#define nil 0
5#include <sys/types.h>
6#include <stdio.h>
7#include <limits.h>
8#include <stdlib.h>
9#include <unistd.h>
10#include <fcntl.h>
11#include <string.h>
12#include <errno.h>
13#include <sys/wait.h>
14
15char LPD1[] = "/usr/sbin/lpd"; /* Proper place of lpd */
16char LPD2[] = "/usr/bin/lpd"; /* Minix has no sbin directories. */
17
18void report(char *mess)
19{
20 fprintf(stderr, "lp: %s: %s\n", mess, strerror(errno));
21}
22
23void fatal(char *mess)
24{
25 report(mess);
26 exit(1);
27}
28
29void lp(char *file)
30/* Start the lpd daemon giving it the file to spool and print. */
31{
32 int pid, status;
33
34 if (file[0] != '/' || (pid= fork()) == 0) {
35 execl(LPD1, LPD1, file, (char *) nil);
36 if (errno != ENOENT) fatal(LPD1);
37 execl(LPD2, LPD2, file, (char *) nil);
38 fatal(LPD2);
39 }
40
41 if (pid < 0) fatal("can't fork");
42
43 if (waitpid(pid, &status, 0) < 0) fatal("wait");
44
45 if (status != 0) exit(1);
46}
47
48char path[PATH_MAX+1];
49int cwdsize;
50
51int main(int argc, char **argp)
52{
53 int e=0;
54 char *file;
55
56 if (argc <= 1) lp("stdin");
57
58 /* Lpd requires full path names, so find out where we are. */
59 if (getcwd(path, sizeof(path)) == nil)
60 fatal("Can't determine current directory");
61
62 cwdsize= strlen(path);
63
64 /* Hand each file to lpd. */
65 while ((file= *++argp) != nil) {
66
67 close(0);
68
69 if (open(file, O_RDONLY) != 0) {
70 report(file);
71 e=1;
72 continue;
73 }
74 if (file[0] == '/') {
75 lp(file);
76 continue;
77 }
78 if (cwdsize + 1 + strlen(file) + 1 > sizeof(path)) {
79 fprintf(stderr,
80 "lp: full pathname of %s is too long\n",
81 file);
82 e=1;
83 continue;
84 }
85 path[cwdsize] = '/';
86 strcpy(path + cwdsize + 1, file);
87
88 lp(path);
89 }
90 exit(e);
91}
Note: See TracBrowser for help on using the repository browser.