1 /**
2 * @file lv_string_rtthread.c
3 */
4
5 /*********************
6 * INCLUDES
7 *********************/
8 #include "../../lv_conf_internal.h"
9 #if LV_USE_STDLIB_STRING == LV_STDLIB_RTTHREAD
10 #include "../lv_string.h"
11 #include "../lv_mem.h" /*Need lv_malloc*/
12 #include <rtthread.h>
13
14 /*********************
15 * DEFINES
16 *********************/
17
18 /**********************
19 * TYPEDEFS
20 **********************/
21
22 /**********************
23 * STATIC PROTOTYPES
24 **********************/
25
26 /**********************
27 * STATIC VARIABLES
28 **********************/
29
30 /**********************
31 * MACROS
32 **********************/
33
34 /**********************
35 * GLOBAL FUNCTIONS
36 **********************/
37
lv_memcpy(void * dst,const void * src,size_t len)38 void * LV_ATTRIBUTE_FAST_MEM lv_memcpy(void * dst, const void * src, size_t len)
39 {
40 return rt_memcpy(dst, src, len);
41 }
42
lv_memset(void * dst,uint8_t v,size_t len)43 void LV_ATTRIBUTE_FAST_MEM lv_memset(void * dst, uint8_t v, size_t len)
44 {
45 rt_memset(dst, v, len);
46 }
47
lv_memmove(void * dst,const void * src,size_t len)48 void * LV_ATTRIBUTE_FAST_MEM lv_memmove(void * dst, const void * src, size_t len)
49 {
50 return rt_memmove(dst, src, len);
51 }
52
lv_strlen(const char * str)53 size_t lv_strlen(const char * str)
54 {
55 return rt_strlen(str);
56 }
57
lv_memcmp(const void * p1,const void * p2,size_t len)58 int lv_memcmp(const void * p1, const void * p2, size_t len)
59 {
60 return rt_memcmp(p1, p2, len);
61 }
62
lv_strlcpy(char * dst,const char * src,size_t dst_size)63 size_t lv_strlcpy(char * dst, const char * src, size_t dst_size)
64 {
65 size_t src_len = lv_strlen(src);
66 if(dst_size > 0) {
67 size_t copy_size = src_len < dst_size ? src_len : dst_size - 1;
68 lv_memcpy(dst, src, copy_size);
69 dst[copy_size] = '\0';
70 }
71 return src_len;
72 }
73
lv_strncpy(char * dst,const char * src,size_t dest_size)74 char * lv_strncpy(char * dst, const char * src, size_t dest_size)
75 {
76 return rt_strncpy(dst, src, dest_size);
77 }
78
lv_strcpy(char * dst,const char * src)79 char * lv_strcpy(char * dst, const char * src)
80 {
81 return rt_strcpy(dst, src);
82 }
83
lv_strcmp(const char * s1,const char * s2)84 int lv_strcmp(const char * s1, const char * s2)
85 {
86 return rt_strcmp(s1, s2);
87 }
88
lv_strncmp(const char * s1,const char * s2,size_t len)89 int lv_strncmp(const char * s1, const char * s2, size_t len)
90 {
91 return rt_strncmp(s1, s2, len);
92 }
93
lv_strdup(const char * src)94 char * lv_strdup(const char * src)
95 {
96 size_t len = lv_strlen(src) + 1;
97 char * dst = lv_malloc(len);
98 if(dst == NULL) return NULL;
99
100 lv_memcpy(dst, src, len); /*memcpy is faster than strncpy when length is known*/
101 return dst;
102 }
103
lv_strcat(char * dst,const char * src)104 char * lv_strcat(char * dst, const char * src)
105 {
106 /*Since RT-thread does not have rt_strcat,
107 the following code is used instead.*/
108 lv_strcpy(dst + lv_strlen(dst), src);
109 return dst;
110 }
111
lv_strncat(char * dst,const char * src,size_t src_len)112 char * lv_strncat(char * dst, const char * src, size_t src_len)
113 {
114 char * tmp = dst;
115 dst += lv_strlen(dst);
116 while(src_len != 0 && *src != '\0') {
117 src_len--;
118 *dst++ = *src++;
119 }
120 *dst = '\0';
121 return tmp;
122 }
123
lv_strchr(const char * s,int c)124 char * lv_strchr(const char * s, int c)
125 {
126 for(; ; s++) {
127 if(*s == c) {
128 return (char *)s;
129 }
130
131 if(*s == '\0') {
132 break;
133 }
134 }
135
136 return NULL;
137 }
138
139 /**********************
140 * STATIC FUNCTIONS
141 **********************/
142
143 #endif /*LV_STDLIB_RTTHREAD*/
144