]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/boot/aux.c
git/fetch: be more robust
[plan9front.git] / sys / src / 9 / boot / aux.c
1 #include <u.h>
2 #include <libc.h>
3 #include <../boot/boot.h>
4
5 void
6 fatal(char *s)
7 {
8         char buf[ERRMAX];
9
10         buf[0] = '\0';
11         errstr(buf, sizeof buf);
12         fprint(2, "boot: %s: %s\n", s, buf);
13         exits(0);
14 }
15
16 int
17 readfile(char *name, char *buf, int len)
18 {
19         int f, n;
20
21         buf[0] = 0;
22         f = open(name, OREAD);
23         if(f < 0)
24                 return -1;
25         n = read(f, buf, len-1);
26         if(n >= 0)
27                 buf[n] = 0;
28         close(f);
29         return 0;
30 }
31
32 void
33 run(char *file, ...)
34 {
35         char buf[64];
36         Waitmsg *w;
37         int pid;
38
39         switch(pid = fork()){
40         case -1:
41                 fatal("fork");
42         case 0:
43                 exec(file, &file);
44                 snprint(buf, sizeof buf, "can't exec %s", file);
45                 fatal(buf);
46         default:
47                 while((w = wait()) != nil)
48                         if(w->pid == pid)
49                                 break;
50                 if(w == nil){
51                         snprint(buf, sizeof buf, "wait returned nil running %s", file);
52                         free(w);
53                         fatal(buf);
54                 }
55                 free(w);
56         }
57 }
58
59 int
60 writefile(char *name, char *buf, int len)
61 {
62         int f, n;
63
64         f = open(name, OWRITE);
65         if(f < 0)
66                 return -1;
67         n = write(f, buf, len);
68         close(f);
69         return (n != len) ? -1 : 0;
70 }
71
72 void
73 setenv(char *name, char *val, int ec)
74 {
75         int f;
76         char ename[64];
77
78         snprint(ename, sizeof ename, "#e%s/%s", ec ? "c" : "", name);
79         f = create(ename, 1, 0666);
80         if(f < 0){
81                 fprint(2, "create %s: %r\n", ename);
82                 return;
83         }
84         write(f, val, strlen(val));
85         close(f);
86 }