From 52d5186e1dc5e7da1cb1ca72a2b4d18c1a453bdd Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Tue, 11 Sep 2001 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2001-09-11 --- boot/boot.c | 26 ++++++++++++++++++++------ port/devsd.c | 3 +++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/boot/boot.c b/boot/boot.c index 0ee03331386bce85ac2295fab2ccb0fdd9806ad1..7dbe93f735f090c32667c742a413bc8c29db2aec 100644 --- a/boot/boot.c +++ b/boot/boot.c @@ -36,12 +36,11 @@ boot(int argc, char *argv[]) { int fd, afd; Method *mp; - char cmd[64]; + char *cmd, cmdbuf[64], *iargv[16]; char rootbuf[64]; - char flags[6]; int islocal, ishybrid; char *rp; - int n; + int iargc, n; char buf[32]; AuthInfo *ai; @@ -154,9 +153,24 @@ boot(int argc, char *argv[]) settime(islocal, afd); swapproc(); - sprint(cmd, "/%s/ninit", cputype); - sprint(flags, "-%s%s", cpuflag ? "c" : "t", mflag ? "m" : ""); - execl(cmd, "init", flags, 0); + cmd = getenv("init"); + if(cmd == nil){ + sprint(cmdbuf, "/%s/ninit -%s%s", cputype, + cpuflag ? "c" : "t", mflag ? "m" : ""); + cmd = cmdbuf; + } + iargc = tokenize(cmd, iargv, nelem(iargv)-1); + cmd = iargv[0]; + + /* make iargv[0] basename(iargv[0]) */ + if(iargv[0] = strrchr(iargv[0], '/')) + iargv[0]++; + else + iargv[0] = cmd; + + iargv[iargc] = nil; + + exec(cmd, iargv); fatal(cmd); } diff --git a/port/devsd.c b/port/devsd.c index 984606825718939929fc7c14bf7ccb2797c36bc6..ad7f14929fe2a027b7f4fae3c524f28c7d64ab2a 100644 --- a/port/devsd.c +++ b/port/devsd.c @@ -1366,6 +1366,9 @@ configure(char *spec, DevConf *cf) snprint(name, sizeof(name), "sd%c", *spec); kstrdup(&sdev->name, name); sdev->idno = *spec; + sdev->unit = (SDunit **)malloc(sdev->nunit * sizeof(SDunit *)); + sdev->unitflg = (int *)malloc(sdev->nunit * sizeof(int)); + assert(sdev->unit && sdev->unitflg); devs[ndevs].dt_dev = sdev; devs[ndevs].dt_nunits = sdev->nunit;