|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.