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