sanitizer_libc.cc revision c0d78c1de1f2607c874020d27b72cf989c5ce092
116e0075746b21ed866ec3be21ef0d1e46f0efed5Kostya Serebryany//===-- sanitizer_libc.cc ---------------------------------------*- C++ -*-===// 2b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany// 3b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany// The LLVM Compiler Infrastructure 4b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany// 5b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany// This file is distributed under the University of Illinois Open Source 6b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany// License. See LICENSE.TXT for details. 7b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany// 8b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany//===----------------------------------------------------------------------===// 9b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany// 10b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany// This file is shared between AddressSanitizer and ThreadSanitizer 1116e0075746b21ed866ec3be21ef0d1e46f0efed5Kostya Serebryany// run-time libraries. See sanitizer_libc.h for details. 12b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany//===----------------------------------------------------------------------===// 133836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonov#include "sanitizer_defs.h" 1416e0075746b21ed866ec3be21ef0d1e46f0efed5Kostya Serebryany#include "sanitizer_libc.h" 15b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany 16b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryanynamespace __sanitizer { 17b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany 18b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryanyvoid MiniLibcStub() { 19b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany} 20b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany 21c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonovint internal_strcmp(const char *s1, const char *s2) { 22c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov while (true) { 23c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov unsigned c1 = *s1; 24c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov unsigned c2 = *s2; 25c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov if (c1 != c2) return (c1 < c2) ? -1 : 1; 26c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov if (c1 == 0) break; 27c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov s1++; 28c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov s2++; 29c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov } 30c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov return 0; 31c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov} 32c0d78c1de1f2607c874020d27b72cf989c5ce092Alexey Samsonov 333836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonovchar *internal_strncpy(char *dst, const char *src, uptr n) { 343836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonov uptr i; 353836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonov for (i = 0; i < n && src[i]; i++) 363836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonov dst[i] = src[i]; 373836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonov for (; i < n; i++) 383836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonov dst[i] = '\0'; 393836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonov return dst; 403836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonov} 413836ff2733d40e1182e301ef7de3eff9469777aeAlexey Samsonov 42b3cedf98a3c8545da2234c2d35cb5d687984035fKostya Serebryany} // namespace __sanitizer 43