3 #include <../boot/boot.h>
7 plumb(char *dir, char *dest, int *efd, char *here)
13 sprint(name, "%s/clone", dir);
14 efd[0] = open(name, ORDWR);
17 n = read(efd[0], buf, sizeof(buf)-1);
23 sprint(name, "%s/%s/data", dir, buf);
25 sprint(buf, "announce %s", here);
26 if(sendmsg(efd[0], buf) < 0){
31 sprint(buf, "connect %s", dest);
32 if(sendmsg(efd[0], buf) < 0){
36 efd[1] = open(name, ORDWR);
46 sendmsg(int fd, char *msg)
51 if(write(fd, msg, n) != n)
62 errstr(buf, sizeof buf);
63 fprint(2, "boot: %s: %s\n", s, buf);
72 errstr(buf, sizeof buf);
73 fprint(2, "boot: %s: %s\n", s, buf);
78 readfile(char *name, char *buf, int len)
83 f = open(name, OREAD);
86 n = read(f, buf, len-1);
94 writefile(char *name, char *buf, int len)
98 f = open(name, OWRITE);
101 n = write(f, buf, len);
103 return (n != len) ? -1 : 0;
107 setenv(char *name, char *val)
112 snprint(ename, sizeof ename, "#e/%s", name);
113 f = create(ename, 1, 0666);
115 fprint(2, "create %s: %r\n", ename);
118 write(f, val, strlen(val));
123 srvcreate(char *name, int fd)
129 srvname = strrchr(name, '/');
135 snprint(buf, sizeof buf, "#s/%s", srvname);
136 f = create(buf, 1, 0666);
139 sprint(buf, "%d", fd);
140 if(write(f, buf, strlen(buf)) != strlen(buf))
146 catchint(void *a, char *note)
149 if(strcmp(note, "alarm") == 0)
155 outin(char *prompt, char *def, int len)
160 if(len >= sizeof buf)
167 print("%s[%s]: ", prompt, *def ? def : "no default");
168 memset(buf, 0, sizeof buf);
169 n = read(0, buf, len);