2 * AcessOS Basic C Library
11 * \fn EXPORT int strcmp(const char *s1, const char *s2)
12 * \brief Compare two strings
14 EXPORT int strcmp(const char *s1, const char *s2)
16 while(*s1 == *s2 && *s1 != '\0' && *s2 != '\0') {
19 return (int)*s1 - (int)*s2;
23 * \fn EXPORT int strncmp(const char *s1, const char *s2)
24 * \brief Compare two strings
26 EXPORT int strncmp(const char *s1, const char *s2, size_t n)
28 if( n == 0 ) return 0;
29 while(n -- && *s1 == *s2 && *s1 != '\0' && *s2 != '\0') {
32 return (int)*s1 - (int)*s2;
36 * \fn EXPORT char *strcpy(char *dst, const char *src)
37 * \brief Copy a string to another
39 EXPORT char *strcpy(char *dst, const char *src)
51 * \fn EXPORT char *strncpy(char *dst, const char *src)
52 * \brief Copy at most \a num characters from \a src to \a dst
55 EXPORT char *strncpy(char *dst, const char *src, size_t num)
58 while(*src && num--) *to++ = *src++;
64 * \fn EXPORT char *strcat(char *dst, const char *src)
65 * \brief Append a string onto another
67 EXPORT char *strcat(char *dst, const char *src)
73 while(*src) *to++ = *src++;
80 * \fn EXPORT int strlen(const char *str)
81 * \brief Get the length of a string
83 EXPORT int strlen(const char *str)
86 for(retval = 0; *str != '\0'; str++)
92 * \fn EXPORT char *strdup(const char *str)
93 * \brief Duplicate a string using heap memory
94 * \note Defined in POSIX Spec, not C spec
96 EXPORT char *strdup(const char *str)
98 size_t len = strlen(str);
99 char *ret = malloc(len+1);
100 if(ret == NULL) return NULL;
106 * \fn EXPORT char *strndup(const char *str, size_t maxlen)
107 * \brief Duplicate a string into the heap with a maximum length
108 * \param str Input string buffer
109 * \param maxlen Maximum valid size of the \a str buffer
110 * \return Heap string with the same value of \a str
112 EXPORT char *strndup(const char *str, size_t maxlen)
116 for( len = 0; len < maxlen && str[len]; len ++) ;
117 ret = malloc( len + 1);
118 memcpy( ret, str, len );
124 * \fn EXPORT char *strchr(char *str, int character)
125 * \brief Locate a character in a string
127 EXPORT char *strchr(const char *str, int character)
131 if(*str == character)
138 * \fn EXPORT char *strrchr(char *str, int character)
139 * \brief Locate the last occurance of a character in a string
141 EXPORT char *strrchr(const char *str, int character)
147 if(str[i] == character)
148 return (void*)&str[i];
154 * \fn EXPORT char *strstr(char *str1, const char *str2)
155 * \brief Search a \a str1 for the first occurance of \a str2
157 EXPORT char *strstr(char *str1, const char *str2)
159 const char *test = str2;
163 if(*test == '\0') return str1;
164 if(*str1 == *test) test++;
172 * \fn EXPORT void *memset(void *dest, int val, size_t num)
173 * \brief Clear memory with the specified value
175 EXPORT void *memset(void *dest, int val, size_t num)
177 unsigned char *p = dest;
178 while(num--) *p++ = val;
183 * \fn EXPORT void *memcpy(void *dest, const void *src, size_t count)
184 * \brief Copy one memory area to another
186 EXPORT void *memcpy(void *dest, const void *src, size_t count)
188 char *sp = (char *)src;
189 char *dp = (char *)dest;
190 for(;count--;) *dp++ = *sp++;
195 * \fn EXPORT void *memmove(void *dest, const void *src, size_t count)
196 * \brief Copy data in memory, avoiding overlap problems
198 EXPORT void *memmove(void *dest, const void *src, size_t count)
200 char *sp = (char *)src;
201 char *dp = (char *)dest;
202 // Check if corruption will happen
203 if( (intptr_t)dest > (intptr_t)src && (intptr_t)dest < (intptr_t)src+count )
204 for(;count--;) dp[count] = sp[count];
206 for(;count--;) *dp++ = *sp++;
211 * \fn EXPORT int memcmp(const void *mem1, const void *mem2, size_t count)
212 * \brief Compare two regions of memory
213 * \param mem1 Region 1
214 * \param mem2 Region 2
215 * \param count Number of bytes to check
217 EXPORT int memcmp(const void *mem1, const void *mem2, size_t count)
221 if( *(unsigned char*)mem1 != *(unsigned char*)mem2 )
222 return *(unsigned char*)mem1 - *(unsigned char*)mem2;
230 * \fn EXPORT void *memchr(void *ptr, int value, size_t num)
231 * \brief Locates the first occurence of \a value starting at \a ptr
232 * \param ptr Starting memory location
233 * \param value Value to find
234 * \param num Size of memory area to check
236 EXPORT void *memchr(const void *ptr, int value, size_t num)
240 if( *(const unsigned char*)ptr == (unsigned char)value )