Annotation of XNU/bsd/kern/bsd_stubs.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: #include <sys/time.h>
                     23: #include <kern/task.h>
                     24: #include <kern/thread.h>
                     25: #import <mach/mach_types.h>
                     26: #include <mach/vm_prot.h>
                     27: #include <vm/vm_kern.h>
                     28: #include <vm/vm_map.h>
                     29: #include <sys/systm.h>
                     30: #include <sys/conf.h>
                     31: 
                     32: kmem_mb_alloc(vm_map_t  mbmap, int size) 
                     33: {
                     34:         vm_offset_t addr;
                     35:        if (kernel_memory_allocate(mbmap, &addr, size,
                     36:                0,
                     37:                KMA_NOPAGEWAIT|KMA_KOBJECT) == KERN_SUCCESS)
                     38:                                 return((void *)addr);
                     39:        else
                     40:                return(0);
                     41:                
                     42: }
                     43: 
                     44: vm_offset_t kalloc_noblock(size)
                     45:        vm_size_t size;
                     46: {      
                     47:        return(kalloc(size));
                     48: }
                     49: vm_offset_t zalloc_noblock(zone)
                     50:        register void * zone;
                     51: {
                     52:        return(zalloc(zone));
                     53: }
                     54: 
                     55: pcb_synch() {}
                     56: task_dowait() {}
                     57: task_hold(task_t t) 
                     58: {
                     59:        return(task_hold_locked(t));
                     60: }
                     61: task_suspend_nowait(task_t task) 
                     62: {
                     63:        return(task_suspend(task));
                     64: }
                     65: task_tllock() {}
                     66: task_tlunlock() {}
                     67: 
                     68: 
                     69: unix_master() {}
                     70: unix_release() {}
                     71: vm_map_check_protection() {}
                     72: vm_map_find() {}
                     73: vm_object_cache_clear() {}
                     74: 
                     75: #undef current_proc
                     76: struct proc *
                     77: current_proc(void)
                     78: {
                     79:        return((struct proc *)get_bsdtask_info(current_task()));
                     80: }
                     81: /* Device switch add delete routines */
                     82: 
                     83: extern int nblkdev, nchrdev;
                     84: 
                     85: struct bdevsw nobdev = NO_BDEVICE;
                     86: struct cdevsw nocdev = NO_CDEVICE;
                     87: /* 
                     88:  *     if index is -1, return a free slot if avaliable
                     89:  *       else see whether the index is free
                     90:  *     return the major number that is free else -1
                     91:  *
                     92:  */
                     93: int
                     94: bdevsw_isfree(int index)
                     95: {
                     96:        struct bdevsw *devsw;
                     97:        if (index == -1) {
                     98:            devsw = bdevsw;
                     99:            for(index=0; index < nblkdev; index++, devsw++) {
                    100:                if(memcmp((char *)devsw, 
                    101:                            (char *)&nobdev, 
                    102:                            sizeof(struct bdevsw)) == 0)
                    103:                    break;
                    104:            }
                    105:        }
                    106: 
                    107:        if ((index < 0) || (index >= nblkdev) ||
                    108:            (memcmp((char *)devsw, 
                    109:                          (char *)&nobdev, 
                    110:                          sizeof(struct bdevsw)) != 0)) {
                    111:                return(-1);
                    112:        }
                    113:        return(index);
                    114: }
                    115: 
                    116: /* 
                    117:  *     if index is -1, find a free slot to add
                    118:  *       else see whether the slot is free
                    119:  *     return the major number that is used else -1
                    120:  */
                    121: int
                    122: bdevsw_add(int index, struct bdevsw * bsw) 
                    123: {
                    124:        struct bdevsw *devsw;
                    125: 
                    126:        if (index == -1) {
                    127:            devsw = bdevsw;
                    128:            for(index=0; index < nblkdev; index++, devsw++) {
                    129:                if(memcmp((char *)devsw, 
                    130:                            (char *)&nobdev, 
                    131:                            sizeof(struct bdevsw)) == 0)
                    132:                    break;
                    133:            }
                    134:        }
                    135:        devsw = &bdevsw[index];
                    136:        if ((index < 0) || (index >= nblkdev) ||
                    137:            (memcmp((char *)devsw, 
                    138:                          (char *)&nobdev, 
                    139:                          sizeof(struct bdevsw)) != 0)) {
                    140:                return(-1);
                    141:        }
                    142:        bdevsw[index] = *bsw;
                    143:        return(index);
                    144: }
                    145: /* 
                    146:  *     if the slot has the same bsw, then remove
                    147:  *     else -1
                    148:  */
                    149: int
                    150: bdevsw_remove(int index, struct bdevsw * bsw) 
                    151: {
                    152:        struct bdevsw *devsw;
                    153: 
                    154:        devsw = &bdevsw[index];
                    155:        if ((index < 0) || (index >= nblkdev) ||
                    156:            (memcmp((char *)devsw, 
                    157:                          (char *)bsw, 
                    158:                          sizeof(struct bdevsw)) != 0)) {
                    159:                return(-1);
                    160:        }
                    161:        bdevsw[index] = nobdev;
                    162:        return(index);
                    163: }
                    164: 
                    165: /* 
                    166:  *     if index is -1, return a free slot if avaliable
                    167:  *       else see whether the index is free
                    168:  *     return the major number that is free else -1
                    169:  */
                    170: int
                    171: cdevsw_isfree(int index)
                    172: {
                    173:        struct cdevsw *devsw;
                    174: 
                    175:        if (index == -1) {
                    176:            devsw = cdevsw;
                    177:            for(index=0; index < nchrdev; index++, devsw++) {
                    178:                if(memcmp((char *)devsw, 
                    179:                            (char *)&nocdev, 
                    180:                            sizeof(struct cdevsw)) == 0)
                    181:                    break;
                    182:            }
                    183:        }
                    184:        devsw = &cdevsw[index];
                    185:        if ((index < 0) || (index >= nchrdev) ||
                    186:            (memcmp((char *)devsw, 
                    187:                          (char *)&nocdev, 
                    188:                          sizeof(struct cdevsw)) != 0)) {
                    189:                return(-1);
                    190:        }
                    191:        return(index);
                    192: }
                    193: 
                    194: /* 
                    195:  *     if index is -1, find a free slot to add
                    196:  *       else see whether the slot is free
                    197:  *     return the major number that is used else -1
                    198:  */
                    199: int
                    200: cdevsw_add(int index, struct cdevsw * csw) 
                    201: {
                    202:        struct cdevsw *devsw;
                    203: 
                    204:        if (index == -1) {
                    205:            devsw = cdevsw;
                    206:            for(index=0; index < nchrdev; index++, devsw++) {
                    207:                if(memcmp((char *)devsw, 
                    208:                            (char *)&nocdev, 
                    209:                            sizeof(struct cdevsw)) == 0)
                    210:                    break;
                    211:            }
                    212:        }
                    213:        devsw = &cdevsw[index];
                    214:        if ((index < 0) || (index >= nchrdev) ||
                    215:            (memcmp((char *)devsw, 
                    216:                          (char *)&nocdev, 
                    217:                          sizeof(struct cdevsw)) != 0)) {
                    218:                return(-1);
                    219:        }
                    220:        cdevsw[index] = *csw;
                    221:        return(index);
                    222: }
                    223: /*
                    224:  *     if the index has the same bsw, then remove
                    225:  *     else -1
                    226:  */
                    227: int
                    228: cdevsw_remove(int index, struct cdevsw * csw) 
                    229: {
                    230:        struct cdevsw *devsw;
                    231: 
                    232:        devsw = &cdevsw[index];
                    233:        if ((index < 0) || (index >= nchrdev) ||
                    234:            (memcmp((char *)devsw, 
                    235:                          (char *)csw, 
                    236:                          sizeof(struct cdevsw)) != 0)) {
                    237:                return(-1);
                    238:        }
                    239:        cdevsw[index] = nocdev;
                    240:        return(index);
                    241: }
                    242: 
                    243: int
                    244: memcmp(s1, s2, n)
                    245:        register char *s1, *s2;
                    246:        register n;
                    247: {
                    248:        while (--n >= 0)
                    249:                if (*s1++ != *s2++)
                    250:                        return (*--s1 - *--s2);
                    251:        return (0);
                    252: }

unix.superglobalmegacorp.com

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