Chameleon

Chameleon Svn Source Tree

Root/branches/xZenu/src/arch/i386/libsa/string.c

Source at commit 1292 created 12 years 8 months ago.
By meklort, Add additional functions to klibc. Remove duplicates from libsa
1/*
2 * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Portions Copyright (c) 1999-2003 Apple Computer, Inc. All Rights
7 * Reserved. This file contains Original Code and/or Modifications of
8 * Original Code as defined in and that are subject to the Apple Public
9 * Source License Version 2.0 (the "License"). You may not use this file
10 * except in compliance with the License. Please obtain a copy of the
11 * License at http://www.apple.com/publicsource and read it before using
12 * this file.
13 *
14 * The Original Code and all software distributed under the License are
15 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the
19 * License for the specific language governing rights and limitations
20 * under the License.
21 *
22 * @APPLE_LICENSE_HEADER_END@
23 */
24/* string operations */
25
26#include "libsa.h"
27
28void bcopy(const void * src, void * dst, size_t len)
29{
30 asm volatile ( "cld \n\t"
31 "movl %%ecx, %%edx \n\t"
32 "shrl $2, %%ecx \n\t"
33 "rep; movsl \n\t"
34 "movl %%edx, %%ecx \n\t"
35 "andl $3, %%ecx \n\t"
36 "rep; movsb \n\t"
37 :
38 : "c" (len), "D" (dst), "S" (src)
39 : "memory", "%edx" );
40}
41
42/* #if DONT_USE_GCC_BUILT_IN_STRLEN */
43
44#define tolower(c) ((int)((c) & ~0x20))
45#define toupper(c) ((int)((c) | 0x20))
46
47/*#endif*/
48
49
50int
51ptol(const char *str)
52{
53register int c = *str;
54
55if (c <= '7' && c >= '0')
56c -= '0';
57else if (c <= 'h' && c >= 'a')
58c -= 'a';
59else c = 0;
60return c;
61}
62
63
64char* strbreak(const char *str, char **next, long *len)
65{
66 char *start = (char*)str, *end;
67 bool quoted = false;
68
69 if ( !start || !len )
70 return 0;
71
72 *len = 0;
73
74 while ( isspace(*start) )
75 start++;
76
77 if (*start == '"')
78 {
79 start++;
80
81 end = strchr(start, '"');
82 if(end)
83 quoted = true;
84 else
85 end = strchr(start, '\0');
86 }
87 else
88 {
89 for ( end = start; *end && !isspace(*end); end++ )
90 {}
91 }
92
93 *len = end - start;
94
95 if(next)
96 *next = quoted ? end+1 : end;
97
98 return start;
99}
100
101/* COPYRIGHT NOTICE: checksum8 from AppleSMBIOS */
102uint8_t checksum8( void * start, unsigned int length )
103{
104 uint8_t csum = 0;
105 uint8_t * cp = (uint8_t *) start;
106 unsigned int i;
107
108 for ( i = 0; i < length; i++)
109 csum += *cp++;
110
111 return csum;
112}
113
114

Archive Download this file

Revision: 1292