/SDK_3.1.5/proj/common/tstring.c

https://github.com/Ai-Thinker-Open/Telink_SIG_Mesh · C · 251 lines · 193 code · 36 blank · 22 comment · 52 complexity · 39502da64f2a4de45955625a49389acd MD5 · raw file

  1. /********************************************************************************************************
  2. * @file tstring.c
  3. *
  4. * @brief for TLSR chips
  5. *
  6. * @author telink
  7. * @date Sep. 30, 2010
  8. *
  9. * @par Copyright (c) 2010, Telink Semiconductor (Shanghai) Co., Ltd.
  10. * All rights reserved.
  11. *
  12. * The information contained herein is confidential and proprietary property of Telink
  13. * Semiconductor (Shanghai) Co., Ltd. and is available under the terms
  14. * of Commercial License Agreement between Telink Semiconductor (Shanghai)
  15. * Co., Ltd. and the licensee in separate contract or the terms described here-in.
  16. * This heading MUST NOT be removed from this file.
  17. *
  18. * Licensees are granted free, non-transferable use of the information in this
  19. * file under Mutual Non-Disclosure Agreement. NO WARRENTY of ANY KIND is provided.
  20. *
  21. *******************************************************************************************************/
  22. #include "types.h"
  23. #include "tstring.h"
  24. #include "../common/assert.h"
  25. #ifndef WIN32
  26. char* strcpy(char * dst0, const char * src0) {
  27. char *s = dst0;
  28. while ((*dst0++ = *src0++))
  29. ;
  30. return s;
  31. }
  32. char * strchr(const char *s, int c) {
  33. do {
  34. if (*s == c) {
  35. return (char*) s;
  36. }
  37. } while (*s++);
  38. return (0);
  39. }
  40. int memcmp(const void * m1, const void *m2, unsigned int n) {
  41. unsigned char *s1 = (unsigned char *) m1;
  42. unsigned char *s2 = (unsigned char *) m2;
  43. while (n--) {
  44. if (*s1 != *s2) {
  45. return *s1 - *s2;
  46. }
  47. s1++;
  48. s2++;
  49. }
  50. return 0;
  51. }
  52. void *
  53. memchr(register const void * src_void, int c, unsigned int length) {
  54. const unsigned char *src = (const unsigned char *) src_void;
  55. while (length-- > 0) {
  56. if (*src == c)
  57. return (void *) src;
  58. src++;
  59. }
  60. return NULL;
  61. }
  62. void * memmove(void * dest, const void * src, unsigned int n) {
  63. char * d = (char *)dest;
  64. char * s = (char *)src;
  65. while (n--)
  66. *d++ = *s++;
  67. return dest;
  68. }
  69. void bbcopy(register char * src, register char * dest, int len) {
  70. if (dest < src)
  71. while (len--)
  72. *dest++ = *src++;
  73. else {
  74. char *lasts = src + (len - 1);
  75. char *lastd = dest + (len - 1);
  76. while (len--)
  77. *(char *) lastd-- = *(char *) lasts--;
  78. }
  79. }
  80. void bcopy(register char * src, register char * dest, int len) {
  81. bbcopy(src, dest, len);
  82. }
  83. void * memset(void * dest, int val, unsigned int len) {
  84. register unsigned char *ptr = (unsigned char*) dest;
  85. while (len-- > 0)
  86. *ptr++ = (unsigned char)val;
  87. return dest;
  88. }
  89. void * memcpy(void * out, const void * in, unsigned int length) {
  90. bcopy((char *) in, (char *) out, (int) length);
  91. return out;
  92. }
  93. #endif
  94. #ifndef WIN32
  95. unsigned int strlen(const char *str) {
  96. unsigned int len = 0;
  97. if (str != NULL) {
  98. while (*str++) {
  99. len++;
  100. }
  101. }
  102. return len;
  103. }
  104. int strcmp(const char* firstString, const char* secondString) {
  105. while (*firstString == *secondString) {
  106. if (*firstString == '\0') {
  107. return 0;
  108. }
  109. ++firstString;
  110. ++secondString;
  111. }
  112. if (((unsigned char) *firstString - (unsigned char) *secondString) < 0) {
  113. return -1;
  114. }
  115. return 1;
  116. }
  117. int strxcmp(const char* firstString, const char* secondString) {
  118. while (*firstString == *secondString) {
  119. if (*firstString == '\0') {
  120. return 0;
  121. }
  122. ++firstString;
  123. ++secondString;
  124. }
  125. if (*firstString == '\0') return 0;
  126. if (((unsigned char) *firstString - (unsigned char) *secondString) < 0) {
  127. return -1;
  128. }
  129. return 1;
  130. }
  131. char * strncpy(char *s, const char *t, unsigned int n) {
  132. char *p = s;
  133. unsigned int i = 0;
  134. if (!s)
  135. return s;
  136. while (t && i < n) {
  137. *s++ = *t++;
  138. i++;
  139. }
  140. if (!t) {
  141. do
  142. *s++ = '\0';
  143. while (i++ < n);
  144. }
  145. return p;
  146. }
  147. char * strstr(const char *s1, const char *s2)
  148. {
  149. int n;
  150. if (*s2){
  151. while(*s1){
  152. for (n=0;*(s1+n)==*(s2+n);n++){
  153. if (!*(s2+n+1)){ //²éÕÒµÄÏÂÒ»¸ö×Ö·ûÊÇ·ñΪ'\0'
  154. return (char*)s1;
  155. }
  156. }
  157. s1++;
  158. }
  159. return NULL;
  160. }else{
  161. return (char*)s1;
  162. }
  163. }
  164. #endif
  165. int ismemzero4(void *data, unsigned int len){
  166. int *p = (int*)data;
  167. len = len >> 2;
  168. for(unsigned int i = 0; i < len; ++i){
  169. if(*p){
  170. return 0;
  171. }
  172. ++p;
  173. }
  174. return 1;
  175. }
  176. int ismemf4(void *data, unsigned int len){
  177. int *p = (int*)data;
  178. len = len >> 2;
  179. for(unsigned int i = 0; i < len; ++i){
  180. if(*p != 0xffffffff){
  181. return 0;
  182. }
  183. ++p;
  184. }
  185. return 1;
  186. }
  187. void * memset4(void * dest, int val, unsigned int len) {
  188. int *p = (int*)dest;
  189. len = len >> 2;
  190. for(unsigned int i = 0; i < len; ++i){
  191. *p++ = val;
  192. }
  193. return dest;
  194. }
  195. void zeromem4(void *data, unsigned int len){
  196. memset4(data, 0, len);
  197. }
  198. // for performance, assume lenght % 4 == 0, and no memory overlapped
  199. #ifndef WIN32
  200. void memcpy4(void * d, const void * s, unsigned int length){
  201. int* dst = (int*)d;
  202. int* src = (int*)s;
  203. assert((((int)dst) >> 2) << 2 == ((int)dst)); // address must alighn to 4
  204. assert((((int)src) >> 2) << 2 == ((int)src)); // address must alighn to 4
  205. assert((length >> 2) << 2 == length); // lenght % 4 == 0
  206. assert(( ((char*)dst) + length <= (const char*)src) || (((const char*)src) + length <= (char*)dst)); // no overlapped
  207. unsigned int len = length >> 2;
  208. while(len --){
  209. *dst++ = *src++;
  210. }
  211. if(length&0x03){
  212. memcpy(dst, src, length&0x03);
  213. }
  214. }
  215. #endif