// Copyright 2016 The Fuchsia Authors
// Copyright 2001, Travis Geiselbrecht
// Copyright 2005, Michael Noisternig
// Copyright (c) 2008 Travis Geiselbrecht
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT

#include <stdint.h>
#include <string.h>

__attribute__((no_sanitize_address)) void *__unsanitized_memset(void *s, int c, size_t count) {
  char *xs = (char *)s;
  size_t len = (-(size_t)s) & (sizeof(size_t) - 1);
  size_t cc = c & 0xff;

  if (count > len) {
    count -= len;
    cc |= cc << 8;
    cc |= cc << 16;
    if (sizeof(size_t) == 8)
      cc |= (size_t)((uint64_t)cc << 32);  // should be optimized out on 32 bit machines

    // write to non-aligned memory byte-wise
    for (; len > 0; len--)
      *xs++ = (char)c;

    // write to aligned memory dword-wise
    for (len = count / sizeof(size_t); len > 0; len--) {
      *((size_t *)xs) = cc;
      xs += sizeof(size_t);
    }

    count &= sizeof(size_t) - 1;
  }

  // write remaining bytes
  for (; count > 0; count--)
    *xs++ = (char)c;

  return s;
}

// Make the function a weak symbol so asan can override it.
__typeof(__unsanitized_memset) memset __attribute__((weak, alias("__unsanitized_memset")));
