diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/9/boot/aux.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/9/boot/aux.c')
-rwxr-xr-x | sys/src/9/boot/aux.c | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/sys/src/9/boot/aux.c b/sys/src/9/boot/aux.c new file mode 100755 index 000000000..b5dec7764 --- /dev/null +++ b/sys/src/9/boot/aux.c @@ -0,0 +1,182 @@ +#include <u.h> +#include <libc.h> +#include <../boot/boot.h> + +/* +int +plumb(char *dir, char *dest, int *efd, char *here) +{ + char buf[128]; + char name[128]; + int n; + + sprint(name, "%s/clone", dir); + efd[0] = open(name, ORDWR); + if(efd[0] < 0) + return -1; + n = read(efd[0], buf, sizeof(buf)-1); + if(n < 0){ + close(efd[0]); + return -1; + } + buf[n] = 0; + sprint(name, "%s/%s/data", dir, buf); + if(here){ + sprint(buf, "announce %s", here); + if(sendmsg(efd[0], buf) < 0){ + close(efd[0]); + return -1; + } + } + sprint(buf, "connect %s", dest); + if(sendmsg(efd[0], buf) < 0){ + close(efd[0]); + return -1; + } + efd[1] = open(name, ORDWR); + if(efd[1] < 0){ + close(efd[0]); + return -1; + } + return efd[1]; +} + */ + +int +sendmsg(int fd, char *msg) +{ + int n; + + n = strlen(msg); + if(write(fd, msg, n) != n) + return -1; + return 0; +} + +void +warning(char *s) +{ + char buf[ERRMAX]; + + buf[0] = '\0'; + errstr(buf, sizeof buf); + fprint(2, "boot: %s: %s\n", s, buf); +} + +void +fatal(char *s) +{ + char buf[ERRMAX]; + + buf[0] = '\0'; + errstr(buf, sizeof buf); + fprint(2, "boot: %s: %s\n", s, buf); + exits(0); +} + +int +readfile(char *name, char *buf, int len) +{ + int f, n; + + buf[0] = 0; + f = open(name, OREAD); + if(f < 0) + return -1; + n = read(f, buf, len-1); + if(n >= 0) + buf[n] = 0; + close(f); + return 0; +} + +int +writefile(char *name, char *buf, int len) +{ + int f, n; + + f = open(name, OWRITE); + if(f < 0) + return -1; + n = write(f, buf, len); + close(f); + return (n != len) ? -1 : 0; +} + +void +setenv(char *name, char *val) +{ + int f; + char ename[64]; + + snprint(ename, sizeof ename, "#e/%s", name); + f = create(ename, 1, 0666); + if(f < 0){ + fprint(2, "create %s: %r\n", ename); + return; + } + write(f, val, strlen(val)); + close(f); +} + +void +srvcreate(char *name, int fd) +{ + char *srvname; + int f; + char buf[64]; + + srvname = strrchr(name, '/'); + if(srvname) + srvname++; + else + srvname = name; + + snprint(buf, sizeof buf, "#s/%s", srvname); + f = create(buf, 1, 0666); + if(f < 0) + fatal(buf); + sprint(buf, "%d", fd); + if(write(f, buf, strlen(buf)) != strlen(buf)) + fatal("write"); + close(f); +} + +void +catchint(void *a, char *note) +{ + USED(a); + if(strcmp(note, "alarm") == 0) + noted(NCONT); + noted(NDFLT); +} + +int +outin(char *prompt, char *def, int len) +{ + int n; + char buf[256]; + + if(len >= sizeof buf) + len = sizeof(buf)-1; + + if(cpuflag){ + notify(catchint); + alarm(15*1000); + } + print("%s[%s]: ", prompt, *def ? def : "no default"); + memset(buf, 0, sizeof buf); + n = read(0, buf, len); + if(cpuflag){ + alarm(0); + notify(0); + } + + if(n < 0) + return 1; + if(n > 1){ + buf[n-1] = 0; + strcpy(def, buf); + } + return n; +} |