sanitizer_libc.cc revision f7667cc84cdd8923c0b6c7cfc92b7bd5692ce18c
1//===-- sanitizer_libc.cc -------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file is shared between AddressSanitizer and ThreadSanitizer 11// run-time libraries. See sanitizer_libc.h for details. 12//===----------------------------------------------------------------------===// 13#include "sanitizer_common.h" 14#include "sanitizer_libc.h" 15 16namespace __sanitizer { 17 18void MiniLibcStub() { 19} 20 21void *internal_memchr(const void *s, int c, uptr n) { 22 const char* t = (char*)s; 23 for (uptr i = 0; i < n; ++i, ++t) 24 if (*t == c) 25 return (void*)t; 26 return 0; 27} 28 29void *internal_memcpy(void *dest, const void *src, uptr n) { 30 char *d = (char*)dest; 31 char *s = (char*)src; 32 for (uptr i = 0; i < n; ++i) 33 d[i] = s[i]; 34 return dest; 35} 36 37char* internal_strdup(const char *s) { 38 uptr len = internal_strlen(s); 39 char *s2 = (char*)InternalAlloc(len + 1); 40 internal_memcpy(s2, s, len); 41 s2[len] = 0; 42 return s2; 43} 44 45int internal_strcmp(const char *s1, const char *s2) { 46 while (true) { 47 unsigned c1 = *s1; 48 unsigned c2 = *s2; 49 if (c1 != c2) return (c1 < c2) ? -1 : 1; 50 if (c1 == 0) break; 51 s1++; 52 s2++; 53 } 54 return 0; 55} 56 57uptr internal_strlen(const char *s) { 58 uptr i = 0; 59 while (s[i]) i++; 60 return i; 61} 62 63char *internal_strncpy(char *dst, const char *src, uptr n) { 64 uptr i; 65 for (i = 0; i < n && src[i]; i++) 66 dst[i] = src[i]; 67 for (; i < n; i++) 68 dst[i] = '\0'; 69 return dst; 70} 71 72} // namespace __sanitizer 73