Annotation of lucent/sys/src/9/boot/aux.c, revision 1.1

1.1     ! root        1: #include <u.h>
        !             2: #include <libc.h>
        !             3: #include <../boot/boot.h>
        !             4: 
        !             5: int
        !             6: plumb(char *dir, char *dest, int *efd, char *here)
        !             7: {
        !             8:        char buf[128];
        !             9:        char name[128];
        !            10:        int n;
        !            11: 
        !            12:        sprint(name, "%s/clone", dir);
        !            13:        efd[0] = open(name, ORDWR);
        !            14:        if(efd[0] < 0)
        !            15:                return -1;
        !            16:        n = read(efd[0], buf, sizeof(buf)-1);
        !            17:        if(n < 0){
        !            18:                close(efd[0]);
        !            19:                return -1;
        !            20:        }
        !            21:        buf[n] = 0;
        !            22:        sprint(name, "%s/%s/data", dir, buf);
        !            23:        if(here){
        !            24:                sprint(buf, "announce %s", here);
        !            25:                if(sendmsg(efd[0], buf) < 0){
        !            26:                        close(efd[0]);
        !            27:                        return -1;
        !            28:                }
        !            29:        }
        !            30:        sprint(buf, "connect %s", dest);
        !            31:        if(sendmsg(efd[0], buf) < 0){
        !            32:                close(efd[0]);
        !            33:                return -1;
        !            34:        }
        !            35:        efd[1] = open(name, ORDWR);
        !            36:        if(efd[1] < 0){
        !            37:                close(efd[0]);
        !            38:                return -1;
        !            39:        }
        !            40:        return efd[1];
        !            41: }
        !            42: 
        !            43: int
        !            44: sendmsg(int fd, char *msg)
        !            45: {
        !            46:        int n;
        !            47: 
        !            48:        n = strlen(msg);
        !            49:        if(write(fd, msg, n) != n)
        !            50:                return -1;
        !            51:        return 0;
        !            52: }
        !            53: 
        !            54: void
        !            55: warning(char *s)
        !            56: {
        !            57:        char buf[ERRLEN];
        !            58: 
        !            59:        errstr(buf);
        !            60:        fprint(2, "boot: %s: %s\n", s, buf);
        !            61: }
        !            62: 
        !            63: void
        !            64: fatal(char *s)
        !            65: {
        !            66:        char buf[ERRLEN];
        !            67: 
        !            68:        errstr(buf);
        !            69:        fprint(2, "boot: %s: %s\n", s, buf);
        !            70:        exits(0);
        !            71: }
        !            72: 
        !            73: int
        !            74: readfile(char *name, char *buf, int len)
        !            75: {
        !            76:        int f, n;
        !            77: 
        !            78:        buf[0] = 0;
        !            79:        f = open(name, OREAD);
        !            80:        if(f < 0)
        !            81:                return -1;
        !            82:        n = read(f, buf, len-1);
        !            83:        if(n >= 0)
        !            84:                buf[n] = 0;
        !            85:        close(f);
        !            86:        return 0;
        !            87: }
        !            88: 
        !            89: int
        !            90: writefile(char *name, char *buf, int len)
        !            91: {
        !            92:        int f, n;
        !            93: 
        !            94:        f = open(name, OWRITE);
        !            95:        if(f < 0)
        !            96:                return -1;
        !            97:        n = write(f, buf, len);
        !            98:        close(f);
        !            99:        return (n != len) ? -1 : 0;
        !           100: }
        !           101: 
        !           102: void
        !           103: setenv(char *name, char *val)
        !           104: {
        !           105:        int f;
        !           106:        char ename[2*NAMELEN];
        !           107: 
        !           108:        sprint(ename, "#e/%s", name);
        !           109:        f = create(ename, 1, 0666);
        !           110:        if(f < 0)
        !           111:                return;
        !           112:        write(f, val, strlen(val));
        !           113:        close(f);
        !           114: }
        !           115: 
        !           116: void
        !           117: srvcreate(char *name, int fd)
        !           118: {
        !           119:        char *srvname;
        !           120:        int f;
        !           121:        char buf[2*NAMELEN];
        !           122: 
        !           123:        srvname = strrchr(name, '/');
        !           124:        if(srvname)
        !           125:                srvname++;
        !           126:        else
        !           127:                srvname = name;
        !           128: 
        !           129:        sprint(buf, "#s/%s", srvname);
        !           130:        f = create(buf, 1, 0666);
        !           131:        if(f < 0)
        !           132:                fatal(buf);
        !           133:        sprint(buf, "%d", fd);
        !           134:        if(write(f, buf, strlen(buf)) != strlen(buf))
        !           135:                fatal("write");
        !           136:        close(f);
        !           137: }
        !           138: 
        !           139: static int
        !           140: catchint(void *a, char *note)
        !           141: {
        !           142:        USED(a);
        !           143:        if(strcmp(note, "alarm") == 0)
        !           144:                return 1;
        !           145:        return 0;
        !           146: }
        !           147: 
        !           148: int
        !           149: outin(int timeout, char *prompt, char *def, int len)
        !           150: {
        !           151:        int n;
        !           152:        char buf[256];
        !           153: 
        !           154:        if(timeout) {
        !           155:                atnotify(catchint, 1);
        !           156:                alarm(15*1000);
        !           157:                do{
        !           158:                        print("%s[%s]: ", prompt, *def ? def : "no default");
        !           159:                        n = read(0, buf, len);
        !           160:                        alarm(15*1000);
        !           161:                }while(n == 0);
        !           162:                alarm(0);
        !           163:                atnotify(catchint, 0);
        !           164:        }
        !           165:        else {
        !           166:                do {
        !           167:                        print("%s[%s]: ", prompt, *def ? def : "no default");
        !           168:                        n = read(0, buf, len);
        !           169:                }while(n == 0);
        !           170:        }
        !           171:        if(n < 0)
        !           172:                return 1;
        !           173:        if(n != 1){
        !           174:                buf[n-1] = 0;
        !           175:                strcpy(def, buf);
        !           176:        }
        !           177:        return n;
        !           178: }
        !           179: 
        !           180: /*
        !           181:  *  get second word of the terminal environment variable.   If it
        !           182:  *  ends in "boot", get rid of that part.
        !           183:  */
        !           184: void
        !           185: getconffile(char *conffile, char *terminal)
        !           186: {
        !           187:        char *p, *q;
        !           188:        char *s;
        !           189:        int n;
        !           190: 
        !           191:        s = conffile;
        !           192:        *conffile = 0;
        !           193:        p = terminal;
        !           194:        if((p = strchr(p, ' ')) == 0 || p[1] == ' ' || p[1] == 0)
        !           195:                return;
        !           196:        p++;
        !           197:        for(q = p; *q && *q != ' '; q++)
        !           198:                ;
        !           199:        while(p < q)
        !           200:                *conffile++ = *p++;
        !           201:        *conffile = 0;
        !           202: 
        !           203:        /* dump a trailing boot */
        !           204:        n = strlen(s);
        !           205:        if(n > 4 && strcmp(s + n - 4, "boot") == 0)
        !           206:                *(s+n-4) = 0;
        !           207: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.