|
|
1.1 ! root 1: #define KERNEL ! 2: #include <sys/typed.h> ! 3: #undef KERNEL ! 4: #include <fcntl.h> ! 5: ! 6: #ifndef T_NULL ! 7: #define T_NULL ((char *)0) ! 8: #endif ! 9: ! 10: /* ! 11: * Pick a namelist file. ! 12: * ! 13: * If we can't open /dev/boot_gift, guess "/coherent". ! 14: * If boot_gift does not have a command line, guess "/autoboot". ! 15: * Otherwise, pull the boot file from the command line. ! 16: */ ! 17: char * ! 18: pick_nfile() ! 19: { ! 20: int fd; ! 21: FIFO *ffp; ! 22: typed_space *tp; ! 23: int found; ! 24: TYPED_SPACE(boot_gift, BG_LEN, T_FIFO_SIC); ! 25: ! 26: /* 16 characters are for "/", a 14 character name, and a NUL. */ ! 27: static char retval[16]; ! 28: ! 29: if (-1 == (fd = open("/dev/boot_gift", O_RDONLY))) { ! 30: /* Can't open boot_gift, guess "/coherent". */ ! 31: strcpy(retval, "/coherent"); ! 32: return(retval); ! 33: } ! 34: ! 35: if (0 == read(fd, &boot_gift, BG_LEN)) { ! 36: close(fd); ! 37: /* Can't read boot_gift, guess "/coherent". */ ! 38: strcpy(retval, "/coherent"); ! 39: return(retval); ! 40: } ! 41: ! 42: close(fd); ! 43: ! 44: found = 0; /* We are looking for the command line. */ ! 45: if (F_NULL != (ffp = fifo_open(&boot_gift, 0))) { ! 46: for (; !found && T_NULL != (tp = fifo_read(ffp)); ) { ! 47: if (T_STR_ARGF == tp->ts_type) { ! 48: found = 1; ! 49: break; ! 50: } ! 51: } ! 52: fifo_close(ffp); ! 53: ! 54: if (!found) { ! 55: strcpy(retval, "/autoboot"); ! 56: } else { ! 57: /* Recast the argument list, so we can read it. */ ! 58: RETYPE(tp, T_FIFO_SIC); ! 59: ffp = fifo_open(tp, 0); ! 60: if (T_NULL == (tp = fifo_read(ffp))) { ! 61: strcpy(retval, "/autoboot"); ! 62: } else { ! 63: sprintf(retval, "/%.14s", tp->ts_data); ! 64: } ! 65: fifo_close(ffp); ! 66: } ! 67: } else { ! 68: strcpy(retval, "/autoboot"); ! 69: } ! 70: ! 71: return(retval); ! 72: ! 73: } /* pick_nfile() */ ! 74:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.