summaryrefslogtreecommitdiff
path: root/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/wstring.c
blob: d1647831d4f805cf0204123e23ff1b6b1d3b1aa5 (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
#include "wstring.h"

size_t wcslen(const wchar_t* str) {
    size_t len = -1;
    wchar_t* p = (wchar_t*)str - 1;

    do {
        len++;
    } while (*++p);

    return len;
}

wchar_t* wcsncpy(wchar_t* dest, const wchar_t* src, size_t num) {
    const wchar_t* p = (const wchar_t*)src - 1;
    wchar_t* q = (wchar_t*)dest - 1;
    wchar_t zero = 0;

    num++;

    while (--num) {
        if (!(*++q = *++p)) {
            while (--num) {
                *++q = 0;
            }

            break;
        }
    }

    return dest;
}

int wcscmp(const wchar_t* str1, const wchar_t* str2) {
    const wchar_t* p1 = (wchar_t*)str1 - 1;
    const wchar_t* p2 = (wchar_t*)str2 - 1;
    wchar_t c1, c2;

    while ((c1 = *++p1) == (c2 = *++p2))
        if (!c1)
            return 0;

    return c1 - c2;
}