X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/0b4e3aa066abc0728aacb4bbeb86f53f9737156e..5eebf7385fedb1517b66b53c28e5aa6bb0a2be50:/bsd/kern/bsd_stubs.c diff --git a/bsd/kern/bsd_stubs.c b/bsd/kern/bsd_stubs.c index 07966f77d..0597434fa 100644 --- a/bsd/kern/bsd_stubs.c +++ b/bsd/kern/bsd_stubs.c @@ -40,15 +40,13 @@ kmem_mb_alloc(vm_map_t mbmap, int size) if (kernel_memory_allocate(mbmap, &addr, size, 0, KMA_NOPAGEWAIT|KMA_KOBJECT) == KERN_SUCCESS) - return((void *)addr); + return(addr); else return(0); } pcb_synch() {} -unix_master() {} -unix_release() {} struct proc * current_proc(void) @@ -100,6 +98,9 @@ bdevsw_isfree(int index) sizeof(struct bdevsw)) == 0) break; } + } else { + /* NB: Not used below unless index is in range */ + devsw = &bdevsw[index]; } if ((index < 0) || (index >= nblkdev) || @@ -122,8 +123,9 @@ bdevsw_add(int index, struct bdevsw * bsw) struct bdevsw *devsw; if (index == -1) { - devsw = bdevsw; - for(index=0; index < nblkdev; index++, devsw++) { + devsw = &bdevsw[1]; /* Start at slot 1 - this is a hack to fix the index=1 hack */ + /* yes, start at 1 to avoid collision with volfs (Radar 2842228) */ + for(index=1; index < nblkdev; index++, devsw++) { if(memcmp((char *)devsw, (char *)&nobdev, sizeof(struct bdevsw)) == 0) @@ -238,7 +240,28 @@ cdevsw_remove(int index, struct cdevsw * csw) return(index); } -int +static int +cdev_set_bdev(int cdev, int bdev) +{ + extern int chrtoblk_add(int cdev, int bdev); + + return (chrtoblk_set(cdev, bdev)); +} + +int +cdevsw_add_with_bdev(int index, struct cdevsw * csw, int bdev) +{ + index = cdevsw_add(index, csw); + if (index < 0) { + return (index); + } + if (cdev_set_bdev(index, bdev) < 0) { + cdevsw_remove(index, csw); + return (-1); + } + return (index); +} + issingleuser(void) { char namep[16];