68 lines
1.5 KiB
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;
|
|
}
|