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