]>
Commit | Line | Data |
---|---|---|
04fee52e A |
1 | /* |
2 | * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. | |
3 | * | |
4 | * @APPLE_LICENSE_HEADER_START@ | |
5 | * | |
8be739c0 A |
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. | |
04fee52e | 11 | * |
8be739c0 A |
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 | |
04fee52e A |
14 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
15 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
8be739c0 A |
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. | |
04fee52e A |
19 | * |
20 | * @APPLE_LICENSE_HEADER_END@ | |
21 | */ | |
22 | /* | |
23 | * string.c - string operations. | |
24 | * | |
25 | * Copyright (c) 1998-2000 Apple Computer, Inc. | |
26 | * | |
27 | * DRI: Josh de Cesare | |
28 | */ | |
29 | ||
30 | #include "libclite.h" | |
31 | ||
32 | /*#if DONT_USE_GCC_BUILT_IN_STRLEN*/ | |
33 | ||
34 | #define tolower(c) ((int)((c) & ~0x20)) | |
35 | #define toupper(c) ((int)((c) | 0x20)) | |
36 | ||
37 | int strlen(const char *s) | |
38 | { | |
39 | int n; | |
40 | ||
41 | n = 0; | |
42 | while (*s++) n++; | |
43 | return(n); | |
44 | } | |
45 | ||
46 | /*#endif*/ | |
47 | ||
48 | int | |
49 | strcmp(const char *s1, const char *s2) | |
50 | { | |
51 | while (*s1 && (*s1 == *s2)) { | |
52 | s1++; | |
53 | s2++; | |
54 | } | |
55 | return (*s1 - *s2); | |
56 | } | |
57 | ||
58 | int strncmp(const char *s1, const char *s2, size_t len) | |
59 | { | |
60 | register int n = len; | |
61 | while (--n >= 0 && *s1 == *s2++) | |
62 | if (*s1++ == '\0') | |
63 | return(0); | |
64 | return(n<0 ? 0 : *s1 - *--s2); | |
65 | } | |
66 | ||
67 | char * | |
68 | strcpy(char *s1, const char *s2) | |
69 | { | |
70 | register char *ret = s1; | |
71 | while (*s1++ = *s2++) | |
72 | continue; | |
73 | return ret; | |
74 | } | |
75 | ||
76 | char * | |
77 | strncpy(char *s1, const char *s2, size_t n) | |
78 | { | |
79 | register char *ret = s1; | |
80 | while (n && (*s1++ = *s2++)) | |
81 | n--; | |
82 | if (!n) *s1=0; | |
83 | return ret; | |
84 | } | |
85 | ||
04fee52e A |
86 | char *strncat(char *s1, const char *s2, size_t n) |
87 | { | |
88 | register char *ret = s1; | |
89 | while (*s1) | |
90 | s1++; | |
91 | while (n-- && *s2) | |
92 | *s1++ = *s2++; | |
93 | *s1 = '\0'; | |
94 | return ret; | |
95 | } | |
96 | ||
97 | char *strcat(char *s1, const char *s2) | |
98 | { | |
99 | return(strncat(s1, s2, strlen(s2))); | |
100 | } | |
101 | ||
102 | /*#if STRNCASECMP*/ | |
103 | int strncasecmp(const char *s1, const char *s2, size_t len) | |
104 | { | |
105 | register int n = len; | |
106 | while (--n >= 0 && tolower(*s1) == tolower(*s2++)) | |
107 | if (*s1++ == '\0') | |
108 | return(0); | |
109 | return(n<0 ? 0 : tolower(*s1) - tolower(*--s2)); | |
110 | } | |
111 | /*#endif*/ | |
112 |