OSDN Git Service

First commitment for the BlackTank LPC1769.
[blacktank/blacktank.git] / ntlibc.c
1 /**
2  * @file ntlibc.c
3  * @author Shinichiro Nakamura
4  * @brief NT-Shellで用いる小規模libcの実装。
5  */
6
7 /*
8  * ===============================================================
9  *  Natural Tiny Shell (NT-Shell)
10  *  Version 0.0.7
11  * ===============================================================
12  * Copyright (c) 2010-2011 Shinichiro Nakamura
13  *
14  * Permission is hereby granted, free of charge, to any person
15  * obtaining a copy of this software and associated documentation
16  * files (the "Software"), to deal in the Software without
17  * restriction, including without limitation the rights to use,
18  * copy, modify, merge, publish, distribute, sublicense, and/or
19  * sell copies of the Software, and to permit persons to whom the
20  * Software is furnished to do so, subject to the following
21  * conditions:
22  *
23  * The above copyright notice and this permission notice shall be
24  * included in all copies or substantial portions of the Software.
25  *
26  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
28  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
30  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
31  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
32  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
33  * OTHER DEALINGS IN THE SOFTWARE.
34  * ===============================================================
35  */
36
37 #include "ntlibc.h"
38
39 size_t ntlibc_strlen(const char *s)
40 {
41     const char *p = s;
42     int cnt = 0;
43     while (*p) {
44         cnt++;
45         p++;
46     }
47     return cnt;
48 }
49
50 char *ntlibc_strcpy(char *des, const char *src)
51 {
52     char *d = des;
53     const char *s = src;
54     while (*s) {
55         *d = *s;
56         d++;
57         s++;
58     }
59     *d = '\0';
60     return des;
61 }
62
63 char *ntlibc_strcat(char *des, const char *src)
64 {
65     char *d = des;
66     const char *s = src;
67     while (*d) {
68         d++;
69     }
70     while (*s) {
71         *d = *s;
72         d++;
73         s++;
74     }
75     *d = '\0';
76     return des;
77 }
78
79 int ntlibc_strcmp(const char *s1, const char *s2)
80 {
81     char *p1 = (char *)s1;
82     char *p2 = (char *)s2;
83     while (*p1 || *p2) {
84         if (*p1 != *p2) {
85             return (*p1 < *p2) ? -1 : 1;
86         }
87         p1++;
88         p2++;
89     }
90     if (*p1 == *p2) {
91         return 0;
92     } else {
93         return (*p1 < *p2) ? -1 : 1;
94     }
95 }
96
97 int ntlibc_strncmp(const char *s1, const char *s2, size_t n)
98 {
99     char *p1 = (char *)s1;
100     char *p2 = (char *)s2;
101     size_t len = 0;
102     while (*p1 || *p2) {
103         if (n <= len) {
104             break;
105         }
106         if (*p1 != *p2) {
107             return (*p1 < *p2) ? -1 : 1;
108         }
109         p1++;
110         p2++;
111         len++;
112     }
113     return 0;
114 }
115
116 #if 0
117 #include <stdio.h>
118 int main(void);
119 int main(void) {
120     char *str_a = "That";
121     char *str_b = "The";
122     printf("strcmp(%s,%s) = %d, %d\n",
123             str_a, str_b,
124             strcmp(str_a, str_b),
125             ntlibc_strcmp(str_a, str_b));
126     printf("strncmp(%s,%s,2) = %d, %d\n",
127             str_a, str_b,
128             strncmp(str_a, str_b, 2),
129             ntlibc_strncmp(str_a, str_b, 2));
130     printf("strncmp(%s,%s,3) = %d, %d\n",
131             str_a, str_b,
132             strncmp(str_a, str_b, 3),
133             ntlibc_strncmp(str_a, str_b, 3));
134     return 0;
135 }
136 #endif
137