Meco Man 3 年之前
父節點
當前提交
663991897b
共有 2 個文件被更改,包括 35 次插入25 次删除
  1. 10 5
      include/rtthread.h
  2. 25 20
      src/kservice.c

+ 10 - 5
include/rtthread.h

@@ -564,6 +564,7 @@ int __rt_ffs(int value);
 
 void *rt_memset(void *src, int c, rt_ubase_t n);
 void *rt_memcpy(void *dest, const void *src, rt_ubase_t n);
+char *rt_strdup(const char *s);
 
 #ifndef RT_KSERVICE_USING_STDLIB
 void *rt_memmove(void *dest, const void *src, rt_ubase_t n);
@@ -573,7 +574,6 @@ rt_int32_t rt_strcasecmp(const char *a, const char *b);
 char *rt_strncpy(char *dest, const char *src, rt_ubase_t n);
 rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_ubase_t count);
 rt_int32_t rt_strcmp(const char *cs, const char *ct);
-rt_size_t rt_strnlen(const char *s, rt_ubase_t maxlen);
 rt_size_t rt_strlen(const char *src);
 #else
 #include <string.h>
@@ -584,15 +584,20 @@ rt_size_t rt_strlen(const char *src);
 #define rt_strncpy(dest, src, n)    strncpy(dest, src, n)
 #define rt_strncmp(cs, ct, count)   strncmp(cs, ct, count)
 #define rt_strcmp(cs, ct)           strcmp(cs, ct)
-#define rt_strnlen(s, maxlen)       strnlen(s, maxlen)
 #define rt_strlen(src)              strlen(src)
 #endif /*RT_KSERVICE_USING_STDLIB*/
 
-char *rt_strdup(const char *s);
+#if !defined(RT_KSERVICE_USING_STDLIB) || defined(__ARMCC_VERSION)
+rt_size_t rt_strnlen(const char *s, rt_ubase_t maxlen);
+#else
+#define rt_strnlen(s, maxlen)       strnlen(s, maxlen)
+#endif /* !defined(RT_KSERVICE_USING_STDLIB) || defined(__ARMCC_VERSION) */
+
 #ifdef __ARMCC_VERSION
-/* lack strdup interface */
+/* MDK doesn't have these APIs */
 char* strdup(const char* str);
-#endif
+size_t strnlen(const char *s, size_t maxlen);
+#endif /* __ARMCC_VERSION */
 
 void rt_show_version(void);
 

+ 25 - 20
src/kservice.c

@@ -500,49 +500,54 @@ rt_int32_t rt_strcmp(const char *cs, const char *ct)
 RTM_EXPORT(rt_strcmp);
 
 /**
- * The  strnlen()  function  returns the number of characters in the
- * string pointed to by s, excluding the terminating null byte ('\0'),
- * but at most maxlen.  In doing this, strnlen() looks only at the
- * first maxlen characters in the string pointed to by s and never
- * beyond s+maxlen.
- *
- * @param  s is the string.
+ * This function will return the length of a string, which terminate will
+ * null character.
  *
- * @param  maxlen is the max size.
+ * @param  s is the string
  *
  * @return The length of string.
  */
-rt_size_t rt_strnlen(const char *s, rt_ubase_t maxlen)
+rt_size_t rt_strlen(const char *s)
 {
     const char *sc;
 
-    for (sc = s; *sc != '\0' && (rt_ubase_t)(sc - s) < maxlen; ++sc) /* nothing */
+    for (sc = s; *sc != '\0'; ++sc) /* nothing */
         ;
 
     return sc - s;
 }
-RTM_EXPORT(rt_strnlen);
+RTM_EXPORT(rt_strlen);
 
+#endif /* RT_KSERVICE_USING_STDLIB */
+
+#if !defined(RT_KSERVICE_USING_STDLIB) || defined(__ARMCC_VERSION)
 /**
- * This function will return the length of a string, which terminate will
- * null character.
+ * The  strnlen()  function  returns the number of characters in the
+ * string pointed to by s, excluding the terminating null byte ('\0'),
+ * but at most maxlen.  In doing this, strnlen() looks only at the
+ * first maxlen characters in the string pointed to by s and never
+ * beyond s+maxlen.
  *
- * @param  s is the string
+ * @param  s is the string.
+ *
+ * @param  maxlen is the max size.
  *
  * @return The length of string.
  */
-rt_size_t rt_strlen(const char *s)
+rt_size_t rt_strnlen(const char *s, rt_ubase_t maxlen)
 {
     const char *sc;
 
-    for (sc = s; *sc != '\0'; ++sc) /* nothing */
+    for (sc = s; *sc != '\0' && (rt_ubase_t)(sc - s) < maxlen; ++sc) /* nothing */
         ;
 
     return sc - s;
 }
-RTM_EXPORT(rt_strlen);
-
-#endif /* RT_KSERVICE_USING_STDLIB */
+RTM_EXPORT(rt_strnlen);
+#ifdef __ARMCC_VERSION
+size_t strnlen(const char *s, size_t maxlen) __attribute__((alias("rt_strnlen")));
+#endif /* __ARMCC_VERSION */
+#endif /* !defined(RT_KSERVICE_USING_STDLIB) || defined(__ARMCC_VERSION) */
 
 #ifdef RT_USING_HEAP
 /**
@@ -567,7 +572,7 @@ char *rt_strdup(const char *s)
 RTM_EXPORT(rt_strdup);
 #ifdef __ARMCC_VERSION
 char *strdup(const char *s) __attribute__((alias("rt_strdup")));
-#endif
+#endif /* __ARMCC_VERSION */
 #endif /* RT_USING_HEAP */
 
 /**