]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/boot/aux.c
Import sources from 2011-03-30 iso image
[plan9front.git] / sys / src / 9 / boot / aux.c
1 #include <u.h>
2 #include <libc.h>
3 #include <../boot/boot.h>
4
5 /*
6 int
7 plumb(char *dir, char *dest, int *efd, char *here)
8 {
9         char buf[128];
10         char name[128];
11         int n;
12
13         sprint(name, "%s/clone", dir);
14         efd[0] = open(name, ORDWR);
15         if(efd[0] < 0)
16                 return -1;
17         n = read(efd[0], buf, sizeof(buf)-1);
18         if(n < 0){
19                 close(efd[0]);
20                 return -1;
21         }
22         buf[n] = 0;
23         sprint(name, "%s/%s/data", dir, buf);
24         if(here){
25                 sprint(buf, "announce %s", here);
26                 if(sendmsg(efd[0], buf) < 0){
27                         close(efd[0]);
28                         return -1;
29                 }
30         }
31         sprint(buf, "connect %s", dest);
32         if(sendmsg(efd[0], buf) < 0){
33                 close(efd[0]);
34                 return -1;
35         }
36         efd[1] = open(name, ORDWR);
37         if(efd[1] < 0){
38                 close(efd[0]);
39                 return -1;
40         }
41         return efd[1];
42 }
43  */
44
45 int
46 sendmsg(int fd, char *msg)
47 {
48         int n;
49
50         n = strlen(msg);
51         if(write(fd, msg, n) != n)
52                 return -1;
53         return 0;
54 }
55
56 void
57 warning(char *s)
58 {
59         char buf[ERRMAX];
60
61         buf[0] = '\0';
62         errstr(buf, sizeof buf);
63         fprint(2, "boot: %s: %s\n", s, buf);
64 }
65
66 void
67 fatal(char *s)
68 {
69         char buf[ERRMAX];
70
71         buf[0] = '\0';
72         errstr(buf, sizeof buf);
73         fprint(2, "boot: %s: %s\n", s, buf);
74         exits(0);
75 }
76
77 int
78 readfile(char *name, char *buf, int len)
79 {
80         int f, n;
81
82         buf[0] = 0;
83         f = open(name, OREAD);
84         if(f < 0)
85                 return -1;
86         n = read(f, buf, len-1);
87         if(n >= 0)
88                 buf[n] = 0;
89         close(f);
90         return 0;
91 }
92
93 int
94 writefile(char *name, char *buf, int len)
95 {
96         int f, n;
97
98         f = open(name, OWRITE);
99         if(f < 0)
100                 return -1;
101         n = write(f, buf, len);
102         close(f);
103         return (n != len) ? -1 : 0;
104 }
105
106 void
107 setenv(char *name, char *val)
108 {
109         int f;
110         char ename[64];
111
112         snprint(ename, sizeof ename, "#e/%s", name);
113         f = create(ename, 1, 0666);
114         if(f < 0){
115                 fprint(2, "create %s: %r\n", ename);
116                 return;
117         }
118         write(f, val, strlen(val));
119         close(f);
120 }
121
122 void
123 srvcreate(char *name, int fd)
124 {
125         char *srvname;
126         int f;
127         char buf[64];
128
129         srvname = strrchr(name, '/');
130         if(srvname)
131                 srvname++;
132         else
133                 srvname = name;
134
135         snprint(buf, sizeof buf, "#s/%s", srvname);
136         f = create(buf, 1, 0666);
137         if(f < 0)
138                 fatal(buf);
139         sprint(buf, "%d", fd);
140         if(write(f, buf, strlen(buf)) != strlen(buf))
141                 fatal("write");
142         close(f);
143 }
144
145 void
146 catchint(void *a, char *note)
147 {
148         USED(a);
149         if(strcmp(note, "alarm") == 0)
150                 noted(NCONT);
151         noted(NDFLT);
152 }
153
154 int
155 outin(char *prompt, char *def, int len)
156 {
157         int n;
158         char buf[256];
159
160         if(len >= sizeof buf)
161                 len = sizeof(buf)-1;
162
163         if(cpuflag){
164                 notify(catchint);
165                 alarm(15*1000);
166         }
167         print("%s[%s]: ", prompt, *def ? def : "no default");
168         memset(buf, 0, sizeof buf);
169         n = read(0, buf, len);
170         if(cpuflag){
171                 alarm(0);
172                 notify(0);
173         }
174
175         if(n < 0)
176                 return 1;
177         if(n > 1){
178                 buf[n-1] = 0;
179                 strcpy(def, buf);
180         }
181         return n;
182 }