aboutsummaryrefslogtreecommitdiff
path: root/libc/string.c
blob: 290aec492b5f3f2259bd36fc6bd451c0f6dbc109 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdint.h>
#include <stddef.h>
#include "string.h"

size_t strlen(const char *str)
{
    int len = 0;
    while(*str++)
        len++;
    return len;
}

void* memset(void *buf, int val, size_t sz)
{
    for(size_t i = 0; i < sz; ++i)
    {
        ((uint8_t*)buf)[i] = (uint8_t) val;
    }
    return buf;
}

void* memcpy(void *dest, void *src, size_t sz)
{
    while(sz--)
        *(char*)dest++ = *(char*)src++;
    return dest;
}

char* strdup(const char *str)
{
    int len = strlen(str);
    /* allocate room for the string and it's NULL terminator */
    char *ret = malloc(len + 1);
    memcpy(ret, str, len + 1);
    return ret;
}

char* strncat(char *dest, const char *src, size_t n)
{
    /* save this for the return */
    char *d = dest;
    while(*dest++);
    while(n && (*dest++ = *src++)) --n;
    if(*dest)
        *dest = '\0';
    return d;
}