13d8536b4Sopenharmony_ci/*
23d8536b4Sopenharmony_ci * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
33d8536b4Sopenharmony_ci * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
43d8536b4Sopenharmony_ci *
53d8536b4Sopenharmony_ci * Redistribution and use in source and binary forms, with or without modification,
63d8536b4Sopenharmony_ci * are permitted provided that the following conditions are met:
73d8536b4Sopenharmony_ci *
83d8536b4Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright notice, this list of
93d8536b4Sopenharmony_ci *    conditions and the following disclaimer.
103d8536b4Sopenharmony_ci *
113d8536b4Sopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright notice, this list
123d8536b4Sopenharmony_ci *    of conditions and the following disclaimer in the documentation and/or other materials
133d8536b4Sopenharmony_ci *    provided with the distribution.
143d8536b4Sopenharmony_ci *
153d8536b4Sopenharmony_ci * 3. Neither the name of the copyright holder nor the names of its contributors may be used
163d8536b4Sopenharmony_ci *    to endorse or promote products derived from this software without specific prior written
173d8536b4Sopenharmony_ci *    permission.
183d8536b4Sopenharmony_ci *
193d8536b4Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
203d8536b4Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
213d8536b4Sopenharmony_ci * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
223d8536b4Sopenharmony_ci * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
233d8536b4Sopenharmony_ci * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
243d8536b4Sopenharmony_ci * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
253d8536b4Sopenharmony_ci * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
263d8536b4Sopenharmony_ci * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
273d8536b4Sopenharmony_ci * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
283d8536b4Sopenharmony_ci * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
293d8536b4Sopenharmony_ci * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
303d8536b4Sopenharmony_ci */
313d8536b4Sopenharmony_ci
323d8536b4Sopenharmony_ci#include "string.h"
333d8536b4Sopenharmony_ci#include "los_lms_pri.h"
343d8536b4Sopenharmony_ci
353d8536b4Sopenharmony_ci#undef memset
363d8536b4Sopenharmony_civoid *memset(void *addr, int c, size_t len)
373d8536b4Sopenharmony_ci{
383d8536b4Sopenharmony_ci    __asan_storeN_noabort((UINTPTR)addr, len);
393d8536b4Sopenharmony_ci    return __memset(addr, c, len);
403d8536b4Sopenharmony_ci}
413d8536b4Sopenharmony_ci
423d8536b4Sopenharmony_ci#undef memmove
433d8536b4Sopenharmony_civoid *memmove(void *dest, const void *src, size_t len)
443d8536b4Sopenharmony_ci{
453d8536b4Sopenharmony_ci    __asan_loadN_noabort((UINTPTR)src, len);
463d8536b4Sopenharmony_ci    __asan_storeN_noabort((UINTPTR)dest, len);
473d8536b4Sopenharmony_ci    return __memmove(dest, src, len);
483d8536b4Sopenharmony_ci}
493d8536b4Sopenharmony_ci
503d8536b4Sopenharmony_ci#undef memcpy
513d8536b4Sopenharmony_civoid *memcpy(void *dest, const void *src, size_t len)
523d8536b4Sopenharmony_ci{
533d8536b4Sopenharmony_ci    __asan_loadN_noabort((UINTPTR)src, len);
543d8536b4Sopenharmony_ci    __asan_storeN_noabort((UINTPTR)dest, len);
553d8536b4Sopenharmony_ci    return __memcpy(dest, src, len);
563d8536b4Sopenharmony_ci}
573d8536b4Sopenharmony_ci
583d8536b4Sopenharmony_ci#undef strcat
593d8536b4Sopenharmony_cichar *strcat(char *s, const char *append)
603d8536b4Sopenharmony_ci{
613d8536b4Sopenharmony_ci    if ((s == NULL) || (append == NULL)) {
623d8536b4Sopenharmony_ci        return NULL;
633d8536b4Sopenharmony_ci    }
643d8536b4Sopenharmony_ci
653d8536b4Sopenharmony_ci    CHAR *end = s;
663d8536b4Sopenharmony_ci    size_t len = strlen(append);
673d8536b4Sopenharmony_ci    for (; *end != '\0'; ++end) {
683d8536b4Sopenharmony_ci    }
693d8536b4Sopenharmony_ci
703d8536b4Sopenharmony_ci    __asan_storeN_noabort((UINTPTR)end, len + 1);
713d8536b4Sopenharmony_ci    __asan_loadN_noabort((UINTPTR)append, len + 1);
723d8536b4Sopenharmony_ci
733d8536b4Sopenharmony_ci    return __strcat(s, append);
743d8536b4Sopenharmony_ci}
753d8536b4Sopenharmony_ci
763d8536b4Sopenharmony_ci#undef strcpy
773d8536b4Sopenharmony_cichar *strcpy(char *dest, const char *src)
783d8536b4Sopenharmony_ci{
793d8536b4Sopenharmony_ci    if ((dest == NULL) || (src == NULL)) {
803d8536b4Sopenharmony_ci        return NULL;
813d8536b4Sopenharmony_ci    }
823d8536b4Sopenharmony_ci
833d8536b4Sopenharmony_ci    size_t len = strlen(src);
843d8536b4Sopenharmony_ci    __asan_storeN_noabort((UINTPTR)dest, len + 1);
853d8536b4Sopenharmony_ci    __asan_loadN_noabort((UINTPTR)src, len + 1);
863d8536b4Sopenharmony_ci
873d8536b4Sopenharmony_ci    return __strcpy(dest, src);
883d8536b4Sopenharmony_ci}
893d8536b4Sopenharmony_ci
903d8536b4Sopenharmony_ci#undef strncat
913d8536b4Sopenharmony_cichar *strncat(char *dest, const char *src, size_t n)
923d8536b4Sopenharmony_ci{
933d8536b4Sopenharmony_ci    if ((dest == NULL) || (src == NULL)) {
943d8536b4Sopenharmony_ci        return NULL;
953d8536b4Sopenharmony_ci    }
963d8536b4Sopenharmony_ci
973d8536b4Sopenharmony_ci    CHAR *end = dest;
983d8536b4Sopenharmony_ci    size_t len = strlen(src);
993d8536b4Sopenharmony_ci    size_t size = len > n ? n : len;
1003d8536b4Sopenharmony_ci    for (; *end != '\0'; ++end) {
1013d8536b4Sopenharmony_ci    }
1023d8536b4Sopenharmony_ci
1033d8536b4Sopenharmony_ci    __asan_storeN_noabort((UINTPTR)end, size + 1);
1043d8536b4Sopenharmony_ci    __asan_loadN_noabort((UINTPTR)src, size + 1);
1053d8536b4Sopenharmony_ci
1063d8536b4Sopenharmony_ci    return __strncat(dest, src, n);
1073d8536b4Sopenharmony_ci}
1083d8536b4Sopenharmony_ci
1093d8536b4Sopenharmony_ci#undef strncpy
1103d8536b4Sopenharmony_cichar *strncpy(char *dest, const char *src, size_t n)
1113d8536b4Sopenharmony_ci{
1123d8536b4Sopenharmony_ci    if ((dest == NULL) || (src == NULL)) {
1133d8536b4Sopenharmony_ci        return NULL;
1143d8536b4Sopenharmony_ci    }
1153d8536b4Sopenharmony_ci
1163d8536b4Sopenharmony_ci    size_t len = strlen(src);
1173d8536b4Sopenharmony_ci    size_t size = len > n ? n : len;
1183d8536b4Sopenharmony_ci
1193d8536b4Sopenharmony_ci    __asan_storeN_noabort((UINTPTR)dest, n);
1203d8536b4Sopenharmony_ci    __asan_loadN_noabort((UINTPTR)src, size + 1);
1213d8536b4Sopenharmony_ci    return __strncpy(dest, src, n);
1223d8536b4Sopenharmony_ci}
123