aboutsummaryrefslogtreecommitdiff
path: root/src/libc/string.c
blob: 0e41efaacbeea0b594065227ddc9a4bf6d36c6c0 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <u.h>
#include <libc.h>

void*
memcopy(void *dst, void *src, intptr n)
{
    byte *e, *s, *d; 

    d = dst;
    e = d + n;
    for (s = src ; d != e; ++s, ++d) {
        *d = *s;
    }

    return dst;
}

void*
memmove(void *dst, void *src, intptr n)
{
    byte *e, *s, *d;
    s = src;
    d = dst;

    if (d < s) {
        e = d + n;
        for (; d != e; ++s, ++d) 
            *d = *s;

    } else {
        e = d;
        d += n;
        s += n;
        for (; d != e; --s, --d)
            d[-1] = s[-1];
    }

    return dst;
}

void*
memset(void *buf, int val, intptr n)
{
    byte *b, *e;
    b = buf;
    e = b + n;
    for (; b != e; b++) {
        *b = (byte)val;
    }

    return buf;
}

int
memcmp(void *lhs, void *rhs, intptr n)
{
    byte *bl, *br, *e;

    br = rhs;
    e  = br + n;
    for (bl = lhs; br != e; ++bl, ++br) {
        if (*bl < *br)
            return -1;
        else if (*bl > *br) 
            return 1;
    }

    return 0;
}

int
strlen(byte* s)
{
    byte* b;
    for (b = s; *b; b++) {
        ;
    }

    return b - s;
}