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

1.1     ! root        1: #include <u.h>
        !             2: #include <libc.h>
        !             3: #include <../boot/boot.h>
        !             4: 
        !             5: static char diskname[2*NAMELEN];
        !             6: static char *disk;
        !             7: 
        !             8: /*
        !             9:  *  This is complete black magic to guess what physical disk the file
        !            10:  *  system is on.  The reason for all the variation is because the
        !            11:  *  info comes in totally different forms from each type of system.
        !            12:  */
        !            13: void
        !            14: configlocal(Method *mp)
        !            15: {
        !            16:        char *p;
        !            17:        int n;
        !            18: 
        !            19:        if(*sys == '/' || *sys == '#'){
        !            20:                /*
        !            21:                 *  if the user specifies the disk in the boot cmd or
        !            22:                 * 'root is from' prompt, use it
        !            23:                 */
        !            24:                disk = sys;
        !            25:        } else if(strncmp(argv0, "dksc(0,", 7) == 0){
        !            26:                /*
        !            27:                 *  on many mips arg0 of the boot command specifies the
        !            28:                 *  scsi logical unit number
        !            29:                 */
        !            30:                p = strchr(argv0, ',');
        !            31:                n = strtoul(p+1, 0, 10);
        !            32:                sprint(diskname, "#w%d/sd%dfs", n, n);
        !            33:                disk = diskname;
        !            34:        } else if(mp->arg){
        !            35:                /*
        !            36:                 *  a default is supplied when the kernel is made
        !            37:                 */
        !            38:                disk = mp->arg;
        !            39:        } else if(*bootdisk){
        !            40:                /*
        !            41:                 *  an environment variable from a pc's plan9.ini or
        !            42:                 *  from the mips nvram or generated by the kernel
        !            43:                 *  is the last resort.
        !            44:                 */
        !            45:                disk = bootdisk;
        !            46:        }
        !            47: 
        !            48:        /* if we've decided on one, pass it on to all programs */
        !            49:        if(disk)
        !            50:                setenv("bootdisk", disk);
        !            51: 
        !            52:        USED(mp);
        !            53: }
        !            54: 
        !            55: int
        !            56: authlocal(void)
        !            57: {
        !            58:        return -1;
        !            59: }
        !            60: 
        !            61: int
        !            62: connectlocal(void)
        !            63: {
        !            64:        int p[2];
        !            65:        char d[DIRLEN];
        !            66:        char partition[2*NAMELEN];
        !            67:        char *args[16], **argp;
        !            68:        char *dfl;
        !            69: 
        !            70:        dfl = "/fs";
        !            71: 
        !            72:        sprint(partition, "%sfs", disk);
        !            73:        if(stat(partition, d) < 0){
        !            74:                strcpy(partition, disk);
        !            75:                if(stat(partition, d) < 0) {
        !            76:                        return -1;
        !            77:                }
        !            78:        }
        !            79: 
        !            80:        print("fs...");
        !            81:        if(bind("#c", "/dev", MREPL) < 0)
        !            82:                fatal("bind #c");
        !            83:        if(bind("#p", "/proc", MREPL) < 0)
        !            84:                fatal("bind #p");
        !            85:        if(pipe(p)<0)
        !            86:                fatal("pipe");
        !            87:        switch(fork()){
        !            88:        case -1:
        !            89:                fatal("fork");
        !            90:        case 0:
        !            91:                dup(p[0], 0);
        !            92:                dup(p[1], 1);
        !            93:                close(p[0]);
        !            94:                close(p[1]);
        !            95:                argp = args;
        !            96:                *argp++ = "fs";
        !            97:                *argp++ = "-f";
        !            98:                *argp++ = partition;
        !            99:                *argp++ = "-s";
        !           100:                *argp = 0;
        !           101:                exec(dfl, args);
        !           102:                fatal("can't exec fs");
        !           103:        default:
        !           104:                break;
        !           105:        }
        !           106: 
        !           107:        close(p[1]);
        !           108:        return p[0];
        !           109: }

unix.superglobalmegacorp.com

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