Annotation of XNU/osfmk/device/subrs.c, revision 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: /*
        !            23:  * @OSF_COPYRIGHT@
        !            24:  */
        !            25: /*
        !            26:  *(C)UNIX System Laboratories, Inc. all or some portions of this file are
        !            27:  *derived from material licensed to the University of California by
        !            28:  *American Telephone and Telegraph Co. or UNIX System Laboratories,
        !            29:  *Inc. and are reproduced herein with the permission of UNIX System
        !            30:  *Laboratories, Inc.
        !            31:  */
        !            32: 
        !            33: /* 
        !            34:  * Mach Operating System
        !            35:  * Copyright (c) 1993,1991,1990,1989,1988 Carnegie Mellon University
        !            36:  * All Rights Reserved.
        !            37:  * 
        !            38:  * Permission to use, copy, modify and distribute this software and its
        !            39:  * documentation is hereby granted, provided that both the copyright
        !            40:  * notice and this permission notice appear in all copies of the
        !            41:  * software, derivative works or modified versions, and any portions
        !            42:  * thereof, and that both notices appear in supporting documentation.
        !            43:  * 
        !            44:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
        !            45:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
        !            46:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
        !            47:  * 
        !            48:  * Carnegie Mellon requests users of this software to return to
        !            49:  * 
        !            50:  *  Software Distribution Coordinator  or  [email protected]
        !            51:  *  School of Computer Science
        !            52:  *  Carnegie Mellon University
        !            53:  *  Pittsburgh PA 15213-3890
        !            54:  * 
        !            55:  * any improvements or extensions that they make and grant Carnegie Mellon
        !            56:  * the rights to redistribute these changes.
        !            57:  */
        !            58: /*
        !            59:  */
        !            60: /*
        !            61:  * Copyright (c) 1988 Regents of the University of California.
        !            62:  * All rights reserved.
        !            63:  *
        !            64:  * Redistribution and use in source and binary forms, with or without
        !            65:  * modification, are permitted provided that the following conditions
        !            66:  * are met:
        !            67:  * 1. Redistributions of source code must retain the above copyright
        !            68:  *    notice, this list of conditions and the following disclaimer.
        !            69:  * 2. Redistributions in binary form must reproduce the above copyright
        !            70:  *    notice, this list of conditions and the following disclaimer in the
        !            71:  *    documentation and/or other materials provided with the distribution.
        !            72:  * 3. All advertising materials mentioning features or use of this software
        !            73:  *    must display the following acknowledgement:
        !            74:  *     This product includes software developed by the University of
        !            75:  *     California, Berkeley and its contributors.
        !            76:  * 4. Neither the name of the University nor the names of its contributors
        !            77:  *    may be used to endorse or promote products derived from this software
        !            78:  *    without specific prior written permission.
        !            79:  *
        !            80:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            81:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            82:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            83:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            84:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            85:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            86:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            87:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            88:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            89:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            90:  * SUCH DAMAGE.
        !            91:  */
        !            92: /*
        !            93:  * Random device subroutines and stubs.
        !            94:  */
        !            95: 
        !            96: #include <vm/vm_kern.h>
        !            97: #include <kern/misc_protos.h>
        !            98: 
        !            99: /* String routines, from CMU */
        !           100: #ifdef strcpy
        !           101: #undef strcmp
        !           102: #undef strncmp
        !           103: #undef strcpy
        !           104: #undef strncpy
        !           105: #undef strlen
        !           106: #endif
        !           107: 
        !           108: /*
        !           109:  * Abstract:
        !           110:  *      strcmp (s1, s2) compares the strings "s1" and "s2".
        !           111:  *      It returns 0 if the strings are identical. It returns
        !           112:  *      > 0 if the first character that differs in the two strings
        !           113:  *      is larger in s1 than in s2 or if s1 is longer than s2 and
        !           114:  *      the contents are identical up to the length of s2.
        !           115:  *      It returns < 0 if the first differing character is smaller
        !           116:  *      in s1 than in s2 or if s1 is shorter than s2 and the
        !           117:  *      contents are identical upto the length of s1.
        !           118:  */
        !           119: 
        !           120: int
        !           121: strcmp(
        !           122:         register const char *s1,
        !           123:         register const char *s2)
        !           124: {
        !           125:         register unsigned int a, b;
        !           126: 
        !           127:         do {
        !           128:                 a = *s1++;
        !           129:                 b = *s2++;
        !           130:                 if (a != b)
        !           131:                         return a-b;     /* includes case when
        !           132:                                            'a' is zero and 'b' is not zero
        !           133:                                            or vice versa */
        !           134:        } while (a != '\0');
        !           135: 
        !           136:         return 0;       /* both are zero */
        !           137: }
        !           138: 
        !           139: /*
        !           140:  * Abstract:
        !           141:  *      strncmp (s1, s2, n) compares the strings "s1" and "s2"
        !           142:  *      in exactly the same way as strcmp does.  Except the
        !           143:  *      comparison runs for at most "n" characters.
        !           144:  */
        !           145: 
        !           146: int
        !           147: strncmp(
        !           148:         register const char *s1,
        !           149:         register const char *s2,
        !           150:         size_t n)
        !           151: {
        !           152:         register unsigned int a, b;
        !           153: 
        !           154:         while (n != 0) {
        !           155:                 a = *s1++;
        !           156:                 b = *s2++;
        !           157:                 if (a != b)
        !           158:                         return a-b;     /* includes case when
        !           159:                                            'a' is zero and 'b' is not zero
        !           160:                                            or vice versa */
        !           161:                 if (a == '\0')
        !           162:                         return 0;       /* both are zero */
        !           163:                 n--;
        !           164:        }
        !           165: 
        !           166:         return 0;
        !           167: }
        !           168: 
        !           169: /*
        !           170:  * Abstract:
        !           171:  *      strcpy copies the contents of the string "from" including
        !           172:  *      the null terminator to the string "to". A pointer to "to"
        !           173:  *      is returned.
        !           174:  */
        !           175: 
        !           176: char *
        !           177: strcpy(
        !           178:         register char *to,
        !           179:         register const char *from)
        !           180: {
        !           181:         register char *ret = to;
        !           182: 
        !           183:         while ((*to++ = *from++) != '\0')
        !           184:                 continue;
        !           185: 
        !           186:         return ret;
        !           187: }
        !           188: 
        !           189: 
        !           190: /*
        !           191:  * Abstract:
        !           192:  *      strncpy copies "count" characters from the "from" string to
        !           193:  *      the "to" string. If "from" contains less than "count" characters
        !           194:  *      "to" will be padded with null characters until exactly "count"
        !           195:  *      characters have been written. The return value is a pointer
        !           196:  *      to the "to" string.
        !           197:  */
        !           198: 
        !           199: char *
        !           200: strncpy(
        !           201:        char *s1, 
        !           202:        const char *s2,
        !           203:        size_t n)
        !           204: {
        !           205:         char *os1 = s1;
        !           206:         unsigned long i;
        !           207: 
        !           208:         for (i = 0; i < n;)
        !           209:                 if ((*s1++ = *s2++) == '\0')
        !           210:                         for (i++; i < n; i++)
        !           211:                                 *s1++ = '\0';
        !           212:                 else
        !           213:                         i++;
        !           214:         return (os1);
        !           215: }
        !           216: 
        !           217: 
        !           218: #if !defined(__alpha)
        !           219: 
        !           220: /*
        !           221:  * Abstract:
        !           222:  *      strlen returns the number of characters in "string" preceeding
        !           223:  *      the terminating null character.
        !           224:  */
        !           225: 
        !           226: size_t
        !           227: strlen(
        !           228:         register const char *string)
        !           229: {
        !           230:         register const char *ret = string;
        !           231: 
        !           232:         while (*string++ != '\0')
        !           233:                 continue;
        !           234:         return string - 1 - ret;
        !           235: }
        !           236: #endif /* !defined(__alpha) */
        !           237: 
        !           238: /*
        !           239:  * atoi:
        !           240:  *
        !           241:  *      This function converts an ascii string into an integer.
        !           242:  *
        !           243:  * input        : string
        !           244:  * output       : a number
        !           245:  */
        !           246: 
        !           247: int
        !           248: atoi(
        !           249:        u_char  *cp)
        !           250: {
        !           251:         int     number;
        !           252: 
        !           253:         for (number = 0; ('0' <= *cp) && (*cp <= '9'); cp++)
        !           254:                 number = (number * 10) + (*cp - '0');
        !           255: 
        !           256:         return( number );
        !           257: }
        !           258: 
        !           259: /*
        !           260:  * convert an ASCII string (decimal radix) to an integer
        !           261:  * inputs:
        !           262:  *     p       string pointer.
        !           263:  *     t       char **, return a pointer to the cahr which terminates the
        !           264:  *             numeric string.
        !           265:  * returns:
        !           266:  *     integer value of the numeric string.
        !           267:  * side effect:
        !           268:  *     pointer to terminating char.
        !           269:  */
        !           270: 
        !           271: int
        !           272: atoi_term(
        !           273:        char    *p,     /* IN */
        !           274:        char    **t)    /* OUT */
        !           275: {
        !           276:         register int n;
        !           277:         register int f;
        !           278: 
        !           279:         n = 0;
        !           280:         f = 0;
        !           281:         for(;;p++) {
        !           282:                 switch(*p) {
        !           283:                 case ' ':
        !           284:                 case '\t':
        !           285:                         continue;
        !           286:                 case '-':
        !           287:                         f++;
        !           288:                 case '+':
        !           289:                         p++;
        !           290:                 }
        !           291:                 break;
        !           292:         }
        !           293:         while(*p >= '0' && *p <= '9')
        !           294:                 n = n*10 + *p++ - '0';
        !           295: 
        !           296:         /* return pointer to terminating character */
        !           297:         if ( t )
        !           298:                 *t = p;
        !           299: 
        !           300:         return(f? -n: n);
        !           301: }
        !           302: 
        !           303: /*
        !           304:  * convert an integer to an ASCII string.
        !           305:  * inputs:
        !           306:  *     num     integer to be converted
        !           307:  *     str     string pointer.
        !           308:  *
        !           309:  * outputs:
        !           310:  *     pointer to string start.
        !           311:  */
        !           312: 
        !           313: char *
        !           314: itoa(
        !           315:        int     num,
        !           316:        char    *str)
        !           317: {
        !           318:         char    digits[11];
        !           319:         register char *dp;
        !           320:         register char *cp = str;
        !           321: 
        !           322:         if (num == 0) {
        !           323:             *cp++ = '0';
        !           324:         }
        !           325:         else {
        !           326:             dp = digits;
        !           327:             while (num) {
        !           328:                 *dp++ = '0' + num % 10;
        !           329:                 num /= 10;
        !           330:             }
        !           331:             while (dp != digits) {
        !           332:                 *cp++ = *--dp;
        !           333:             }
        !           334:         }
        !           335:         *cp++ = '\0';
        !           336: 
        !           337:        return str;
        !           338: }
        !           339: 
        !           340: char *
        !           341: strcat(
        !           342:        register char *dest,
        !           343:        register const char *src)
        !           344: {
        !           345:        char *old = dest;
        !           346: 
        !           347:        while (*dest)
        !           348:                ++dest;
        !           349:        while (*dest++ = *src++)
        !           350:                ;
        !           351:        return (old);
        !           352: }
        !           353: 

unix.superglobalmegacorp.com

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