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