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 char *strcpy(char *dst, const char *src)
24 * \brief Copy a string to another
26 EXPORT char *strcpy(char *dst, const char *src)
38 * \fn EXPORT char *strncpy(char *dst, const char *src)
39 * \brief Copy at most \a num characters from \a src to \a dst
42 EXPORT char *strncpy(char *dst, const char *src, size_t num)
45 while(*src && num--) *to++ = *src++;
51 * \fn EXPORT char *strcat(char *dst, const char *src)
52 * \brief Append a string onto another
54 EXPORT char *strcat(char *dst, const char *src)
60 while(*src) *to++ = *src++;
67 * \fn EXPORT int strlen(const char *str)
68 * \brief Get the length of a string
70 EXPORT int strlen(const char *str)
73 for(retval = 0; *str != '\0'; str++)
79 * \fn EXPORT int strncmp(const char *s1, const char *s2, size_t len)
80 * \brief Compare two strings with a limit
82 EXPORT int strncmp(const char *s1, const char *s2, size_t len)
84 while(--len && *s1 == *s2 && *s1 != '\0' && *s2 != '\0') {
87 return (int)*s1 - (int)*s2;
91 * \fn EXPORT char *strdup(const char *str)
92 * \brief Duplicate a string using heap memory
93 * \note Defined in POSIX Spec, not C spec
95 EXPORT char *strdup(const char *str)
97 size_t len = strlen(str);
98 char *ret = malloc(len+1);
99 if(ret == NULL) return NULL;
105 * \fn EXPORT char *strchr(char *str, int character)
106 * \brief Locate a character in a string
108 EXPORT char *strchr(char *str, int character)
112 if(*str == character) return str;
118 * \fn EXPORT char *strrchr(char *str, int character)
119 * \brief Locate the last occurance of a character in a string
121 EXPORT char *strrchr(char *str, int character)
127 if(str[i] == character) return &str[i];
133 * \fn EXPORT char *strstr(char *str1, const char *str2)
134 * \brief Search a \a str1 for the first occurance of \a str2
136 EXPORT char *strstr(char *str1, const char *str2)
138 const char *test = str2;
142 if(*test == '\0') return str1;
143 if(*str1 == *test) test++;
152 * \fn EXPORT void *memset(void *dest, int val, size_t num)
153 * \brief Clear memory with the specified value
155 EXPORT void *memset(void *dest, int val, size_t num)
157 unsigned char *p = dest;
158 while(num--) *p++ = val;
163 * \fn EXPORT void *memcpy(void *dest, const void *src, size_t count)
164 * \brief Copy one memory area to another
166 EXPORT void *memcpy(void *dest, const void *src, size_t count)
168 char *sp = (char *)src;
169 char *dp = (char *)dest;
170 for(;count--;) *dp++ = *sp++;
175 * \fn EXPORT void *memmove(void *dest, const void *src, size_t count)
176 * \brief Copy data in memory, avoiding overlap problems
178 EXPORT void *memmove(void *dest, const void *src, size_t count)
180 char *sp = (char *)src;
181 char *dp = (char *)dest;
182 // Check if corruption will happen
183 if( (unsigned int)dest > (unsigned int)src && (unsigned int)dest < (unsigned int)src+count )
184 for(;count--;) dp[count] = sp[count];
186 for(;count--;) *dp++ = *sp++;
191 * \fn EXPORT int memcmp(const void *mem1, const void *mem2, size_t count)
192 * \brief Compare two regions of memory
193 * \param mem1 Region 1
194 * \param mem2 Region 2
195 * \param count Number of bytes to check
197 EXPORT int memcmp(const void *mem1, const void *mem2, size_t count)
201 if( *(unsigned char*)mem1 != *(unsigned char*)mem2 )
202 return *(unsigned char*)mem1 - *(unsigned char*)mem2;
210 * \fn EXPORT void *memchr(void *ptr, int value, size_t num)
211 * \brief Locates the first occurence of \a value starting at \a ptr
212 * \param ptr Starting memory location
213 * \param value Value to find
214 * \param num Size of memory area to check
216 EXPORT void *memchr(void *ptr, int value, size_t num)
220 if( *(unsigned char*)ptr == (unsigned char)value )