1*418b791dSBob Badour /*
2*418b791dSBob Badour * Copyright (c) 2019, The Linux Foundation. All rights reserved.
3*418b791dSBob Badour *
4*418b791dSBob Badour * Redistribution and use in source and binary forms, with or without
5*418b791dSBob Badour * modification, are permitted provided that the following conditions are
6*418b791dSBob Badour * met:
7*418b791dSBob Badour * * Redistributions of source code must retain the above copyright
8*418b791dSBob Badour * notice, this list of conditions and the following disclaimer.
9*418b791dSBob Badour * * Redistributions in binary form must reproduce the above
10*418b791dSBob Badour * copyright notice, this list of conditions and the following
11*418b791dSBob Badour * disclaimer in the documentation and/or other materials provided
12*418b791dSBob Badour * with the distribution.
13*418b791dSBob Badour * * Neither the name of The Linux Foundation nor the names of its
14*418b791dSBob Badour * contributors may be used to endorse or promote products derived
15*418b791dSBob Badour * from this software without specific prior written permission.
16*418b791dSBob Badour *
17*418b791dSBob Badour * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18*418b791dSBob Badour * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19*418b791dSBob Badour * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20*418b791dSBob Badour * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21*418b791dSBob Badour * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22*418b791dSBob Badour * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23*418b791dSBob Badour * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24*418b791dSBob Badour * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25*418b791dSBob Badour * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26*418b791dSBob Badour * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27*418b791dSBob Badour * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*418b791dSBob Badour */
29*418b791dSBob Badour
30*418b791dSBob Badour /*
31*418b791dSBob Badour =======================================================================
32*418b791dSBob Badour
33*418b791dSBob Badour FILE: std_mem.c
34*418b791dSBob Badour
35*418b791dSBob Badour SERVICES: apiOne std lib memory operations stuff
36*418b791dSBob Badour
37*418b791dSBob Badour */
38*418b791dSBob Badour
39*418b791dSBob Badour #include <string.h>
40*418b791dSBob Badour #include "AEEstd.h"
41*418b791dSBob Badour #include "AEEStdErr.h"
42*418b791dSBob Badour
43*418b791dSBob Badour #if defined __hexagon__
44*418b791dSBob Badour #include "stringl/stringl.h"
45*418b791dSBob Badour
46*418b791dSBob Badour //Add a weak reference so shared objects work with older images
47*418b791dSBob Badour #pragma weak memscpy
48*418b791dSBob Badour #pragma weak memsmove
49*418b791dSBob Badour #endif /*__hexagon__*/
50*418b791dSBob Badour
std_memset(void * p,int c,int nLen)51*418b791dSBob Badour void* std_memset(void* p, int c, int nLen)
52*418b791dSBob Badour {
53*418b791dSBob Badour if (nLen < 0) {
54*418b791dSBob Badour return p;
55*418b791dSBob Badour }
56*418b791dSBob Badour return memset(p, c, (size_t)nLen);
57*418b791dSBob Badour }
58*418b791dSBob Badour
std_memmove(void * pTo,const void * cpFrom,int nLen)59*418b791dSBob Badour void* std_memmove(void* pTo, const void* cpFrom, int nLen)
60*418b791dSBob Badour {
61*418b791dSBob Badour if (nLen <= 0) {
62*418b791dSBob Badour return pTo;
63*418b791dSBob Badour }
64*418b791dSBob Badour #ifdef __hexagon__
65*418b791dSBob Badour std_memsmove(pTo, (size_t)nLen, cpFrom, (size_t)nLen);
66*418b791dSBob Badour return pTo;
67*418b791dSBob Badour #else
68*418b791dSBob Badour return memmove(pTo, cpFrom, (size_t)nLen);
69*418b791dSBob Badour #endif
70*418b791dSBob Badour }
71*418b791dSBob Badour
std_memscpy(void * dst,int dst_size,const void * src,int src_size)72*418b791dSBob Badour int std_memscpy(void *dst, int dst_size, const void *src, int src_size){
73*418b791dSBob Badour size_t copy_size = 0;
74*418b791dSBob Badour
75*418b791dSBob Badour if(dst_size <0 || src_size <0){
76*418b791dSBob Badour return AEE_EBADSIZE;
77*418b791dSBob Badour }
78*418b791dSBob Badour
79*418b791dSBob Badour #if defined (__hexagon__)
80*418b791dSBob Badour if (memscpy){
81*418b791dSBob Badour return memscpy(dst,dst_size,src,src_size);
82*418b791dSBob Badour }
83*418b791dSBob Badour #endif
84*418b791dSBob Badour
85*418b791dSBob Badour copy_size = (dst_size <= src_size)? dst_size : src_size;
86*418b791dSBob Badour memcpy(dst, src, copy_size);
87*418b791dSBob Badour return copy_size;
88*418b791dSBob Badour }
89*418b791dSBob Badour
std_memsmove(void * dst,int dst_size,const void * src,int src_size)90*418b791dSBob Badour int std_memsmove(void *dst, int dst_size, const void *src, int src_size){
91*418b791dSBob Badour size_t copy_size = 0;
92*418b791dSBob Badour
93*418b791dSBob Badour if(dst_size <0 || src_size <0){
94*418b791dSBob Badour return AEE_EBADSIZE;
95*418b791dSBob Badour }
96*418b791dSBob Badour
97*418b791dSBob Badour #if defined (__hexagon__)
98*418b791dSBob Badour if (memsmove){
99*418b791dSBob Badour return memsmove(dst,dst_size,src,src_size);
100*418b791dSBob Badour }
101*418b791dSBob Badour #endif
102*418b791dSBob Badour
103*418b791dSBob Badour copy_size = (dst_size <= src_size)? dst_size : src_size;
104*418b791dSBob Badour memmove(dst, src, copy_size);
105*418b791dSBob Badour return copy_size;
106*418b791dSBob Badour }
107*418b791dSBob Badour
108