+ }
+ }
+
+ for (cnt = 0; cnt < sizeof(args)/sizeof(args[0]); args[cnt++] = 0);
+#ifndef SMALL
+ for (t = str; *t && *t != '/' && *t != ':' && *t != '('; ++t)
+ if (isupper(*t))
+ *t = tolower(*t);
+ switch(*t) {
+ case '(': /* type(adapt, ctlr, drive, partition)file */
+ if ((file->i_ino.i_dev = getdev(str, t - str)) == -1)
+ goto bad;
+ for (argp = args + 4, cnt = 0; *t != ')'; ++cnt) {
+ for (++t; isspace(*t); ++t);
+ if (*t == ')')
+ break;
+ if (!isdigit(*t))
+ goto badspec;
+ *argp++ = atoi(t);
+ for (++t; isdigit(*t); ++t);
+ if (*t != ',' && *t != ')' || cnt == 4)
+ goto badspec;
+ }
+ for (++t; isspace(*t); ++t);
+ argp -= 4;
+ file->i_adapt = *argp++;
+ file->i_ctlr = *argp++;
+ file->i_unit = *argp++;
+ file->i_part = *argp;
+ break;
+ case ':': /* [A-Za-z]*[0-9]*[A-Za-z]:file */
+ for (t = str; *t != ':' && !isdigit(*t); ++t);
+ if ((file->i_ino.i_dev = getdev(str, t - str)) == -1)
+ goto bad;
+ if ((file->i_unit = getunit(t)) == -1)
+ goto bad;
+ for (; isdigit(*t); ++t);
+ if (*t >= 'a' && *t <= 'h')
+ file->i_part = *t++ - 'a';
+ if (*t != ':') {
+ errno = EOFFSET;
+ goto badspec;
+ }
+ for (++t; isspace(*t); ++t);
+ break;
+ case '/':
+ default: /* default bootstrap unit and device */
+#else
+ {
+#endif /* SMALL */
+ file->i_ino.i_dev = B_TYPE(bootdev);
+ file->i_adapt = B_ADAPTOR(bootdev);
+ file->i_ctlr = B_CONTROLLER(bootdev);
+ file->i_unit = B_UNIT(bootdev);
+ file->i_part = B_PARTITION(bootdev);
+ t = str;