1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/*
259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Copyright (C) 2008-2012  OMRON SOFTWARE Co., Ltd.
3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License.
6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at
7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and
14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License.
15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_lib.h"
18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project#include "nj_ext.h"
19053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_CHAR *nj_strcpy(NJ_CHAR *dst, NJ_CHAR *src) {
22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    NJ_CHAR *ret = dst;
24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    while (*src != NJ_CHAR_NUL) {
27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        *dst++ = *src++;
28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    *dst = *src;
30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    return ret;
31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_CHAR *nj_strncpy(NJ_CHAR *dst, NJ_CHAR *src, NJ_UINT16 n) {
34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    NJ_CHAR *d = dst;
36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    while (n != 0) {
39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (*src == NJ_CHAR_NUL) {
40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            while (n != 0) {
41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                *d++ = NJ_CHAR_NUL;
42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                n--;
43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            *d++ = *src++;
47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        n--;
49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    return dst;
51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_UINT16 nj_strlen(NJ_CHAR *c) {
54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    NJ_UINT16 count = 0;
56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    while (*c++ != NJ_CHAR_NUL) {
59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        count++;
60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    return count;
62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 nj_strcmp(NJ_CHAR *s1, NJ_CHAR *s2) {
65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    while (*s1 == *s2) {
67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (*s1 == NJ_CHAR_NUL) {
68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return (0);
69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        s1++;
71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        s2++;
72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    return NJ_CHAR_DIFF(s1, s2);
74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 nj_strncmp(NJ_CHAR *s1, NJ_CHAR *s2, NJ_UINT16 n) {
77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    while (n != 0) {
79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (*s1 != *s2++) {
80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return NJ_CHAR_DIFF(s1, (s2 - 1));
81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (*s1++ == NJ_CHAR_NUL) {
83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        n--;
86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    return (0);
88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_UINT16 nj_charlen(NJ_CHAR *c) {
91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    NJ_UINT16 count = 0;
93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    while (*c != NJ_CHAR_NUL) {
96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        count++;
97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        c += NJ_CHAR_LEN(c);
98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    return count;
100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_INT16 nj_charncmp(NJ_CHAR *s1, NJ_CHAR *s2, NJ_UINT16 n) {
103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    NJ_UINT16 i;
104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    while (n != 0) {
107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        for (i = NJ_CHAR_LEN(s1); i != 0; i--) {
108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (*s1 != *s2) {
109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                return NJ_CHAR_DIFF(s1, s2);
110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (*s1 == NJ_CHAR_NUL) {
112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            s1++;
115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            s2++;
116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        n--;
118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    return (0);
120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_CHAR *nj_charncpy(NJ_CHAR *dst, NJ_CHAR *src, NJ_UINT16 n) {
123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    NJ_CHAR *d = dst;
125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    NJ_UINT16 i;
126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    while (n != 0) {
129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        for (i = NJ_CHAR_LEN(src); i != 0; i--) {
130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            *d = *src;
131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (*src == NJ_CHAR_NUL) {
132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                return dst;
133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            d++;
135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            src++;
136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        n--;
138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    *d = NJ_CHAR_NUL;
140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    return dst;
141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source ProjectNJ_UINT8 *nj_memcpy(NJ_UINT8 *dst, NJ_UINT8 *src, NJ_UINT16 n) {
144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    NJ_UINT8 *d = dst;
146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    while (n != 0) {
149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        *d++ = *src++;
150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        n--;
151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
152053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    return dst;
153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
154