os-k/src/kaleid/common/lib/string.c

68 lines
1.5 KiB
C

//----------------------------------------------------------------------------//
// GNU GPL OS/K //
// //
// Authors: spectral` //
// NeoX //
// //
// Desc: String-related functions //
//----------------------------------------------------------------------------//
#include "common/string.h"
// TODO multibyte, assembly
//
// Returns str's length
//
size_t strlen(const char *str)
{
const char *base = str;
while (*str++);
return (str - base - 1);
}
//
// Copy the string src into dest
//
char *strcpy(char *dest, const char *src)
{
char *base = dest;
while ((*dest++ = *src++));
return base;
}
//
// strcpy() but safer
//
char *strncpy(char *dest, const char *src, size_t n)
{
size_t i;
for (i = 0; i < n && src[i]; i++) {
dest[i] = src[i];
}
while (i < n) dest[i++] = 0;
return dest;
}
//
// Reverses a string
//
char *reverse(char *str)
{
char ch, *orig = str;
size_t n = strlen(str);
char *temp = str + n - 1;
while (temp > str) {
ch = *temp;
*temp-- = *str;
*str++ = ch;
}
return orig;
}