1 /*	startdaemon.c	4.6	83/06/29	*/
2 /*
3  * Tell the printer daemon that there are new files in the spool directory.
4  */
5 
6 #include <stdio.h>
7 #include <sys/types.h>
8 #include <sys/socket.h>
9 #include <sys/un.h>
10 #include "lp.local.h"
11 
12 startdaemon(printer)
13 	char *printer;
14 {
15 	struct sockaddr_un sun;
16 	register int s, n;
17 	char buf[BUFSIZ];
18 
19 	s = socket(AF_UNIX, SOCK_STREAM, 0);
20 	if (s < 0) {
21 		perr("socket");
22 		return(0);
23 	}
24 	sun.sun_family = AF_UNIX;
25 	strcpy(sun.sun_path, SOCKETNAME);
26 	if (connect(s, &sun, strlen(sun.sun_path) + 2) < 0) {
27 		perr("connect");
28 		(void) close(s);
29 		return(0);
30 	}
31 	(void) sprintf(buf, "\1%s\n", printer);
32 	n = strlen(buf);
33 	if (write(s, buf, n) != n) {
34 		perr("write");
35 		(void) close(s);
36 		return(0);
37 	}
38 	if (read(s, buf, 1) == 1) {
39 		if (buf[0] == '\0') {		/* everything is OK */
40 			(void) close(s);
41 			return(1);
42 		}
43 		putchar(buf[0]);
44 	}
45 	while ((n = read(s, buf, sizeof(buf))) > 0)
46 		fwrite(buf, 1, n, stdout);
47 	(void) close(s);
48 	return(0);
49 }
50 
51 static
52 perr(msg)
53 	char *msg;
54 {
55 	extern char *name;
56 	extern int sys_nerr;
57 	extern char *sys_errlist[];
58 	extern int errno;
59 
60 	printf("%s: %s: ", name, msg);
61 	fputs(errno < sys_nerr ? sys_errlist[errno] : "Unknown error" , stdout);
62 	putchar('\n');
63 }
64