Commit | Line | Data |
---|---|---|
d0aeaf5a DF |
1 | /* |
2 | * Copyright (c) 1983 Regents of the University of California. | |
9d85c861 KB |
3 | * All rights reserved. |
4 | * | |
1c15e888 C |
5 | * Redistribution and use in source and binary forms are permitted provided |
6 | * that: (1) source distributions retain this entire copyright notice and | |
7 | * comment, and (2) distributions including binaries display the following | |
8 | * acknowledgement: ``This product includes software developed by the | |
9 | * University of California, Berkeley and its contributors'' in the | |
10 | * documentation or other materials provided with the distribution and in | |
11 | * all advertising materials mentioning features or use of this software. | |
12 | * Neither the name of the University nor the names of its contributors may | |
13 | * be used to endorse or promote products derived from this software without | |
14 | * specific prior written permission. | |
15 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED | |
16 | * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF | |
17 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
d0aeaf5a DF |
18 | */ |
19 | ||
5f84f8f0 | 20 | #ifndef lint |
1c15e888 | 21 | static char sccsid[] = "@(#)startdaemon.c 5.6 (Berkeley) 6/1/90"; |
9d85c861 | 22 | #endif /* not lint */ |
5f84f8f0 | 23 | |
c6e2cb21 RC |
24 | /* |
25 | * Tell the printer daemon that there are new files in the spool directory. | |
26 | */ | |
27 | ||
8fed920b RC |
28 | #include <sys/types.h> |
29 | #include <sys/socket.h> | |
30 | #include <sys/un.h> | |
7abf8d65 | 31 | #include <stdio.h> |
8fed920b | 32 | #include "lp.local.h" |
7abf8d65 | 33 | #include "pathnames.h" |
c6e2cb21 | 34 | |
8fed920b RC |
35 | startdaemon(printer) |
36 | char *printer; | |
c6e2cb21 | 37 | { |
8fed920b RC |
38 | struct sockaddr_un sun; |
39 | register int s, n; | |
c6e2cb21 RC |
40 | char buf[BUFSIZ]; |
41 | ||
8fed920b RC |
42 | s = socket(AF_UNIX, SOCK_STREAM, 0); |
43 | if (s < 0) { | |
44 | perr("socket"); | |
45 | return(0); | |
46 | } | |
47 | sun.sun_family = AF_UNIX; | |
7abf8d65 | 48 | strcpy(sun.sun_path, _PATH_SOCKETNAME); |
8fed920b RC |
49 | if (connect(s, &sun, strlen(sun.sun_path) + 2) < 0) { |
50 | perr("connect"); | |
51 | (void) close(s); | |
c6e2cb21 | 52 | return(0); |
f545660a | 53 | } |
c6e2cb21 | 54 | (void) sprintf(buf, "\1%s\n", printer); |
8fed920b RC |
55 | n = strlen(buf); |
56 | if (write(s, buf, n) != n) { | |
57 | perr("write"); | |
58 | (void) close(s); | |
c6e2cb21 RC |
59 | return(0); |
60 | } | |
8fed920b RC |
61 | if (read(s, buf, 1) == 1) { |
62 | if (buf[0] == '\0') { /* everything is OK */ | |
63 | (void) close(s); | |
64 | return(1); | |
65 | } | |
66 | putchar(buf[0]); | |
c6e2cb21 | 67 | } |
8fed920b RC |
68 | while ((n = read(s, buf, sizeof(buf))) > 0) |
69 | fwrite(buf, 1, n, stdout); | |
70 | (void) close(s); | |
71 | return(0); | |
c6e2cb21 | 72 | } |
f545660a RC |
73 | |
74 | static | |
8fed920b RC |
75 | perr(msg) |
76 | char *msg; | |
f545660a | 77 | { |
8fed920b | 78 | extern int errno; |
7af1139d KB |
79 | extern char *name; |
80 | char *strerror(); | |
f545660a | 81 | |
7af1139d | 82 | (void)printf("%s: %s: %s\n", name, msg, strerror(errno)); |
f545660a | 83 | } |