mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-30 23:55:18 +00:00

This corrects the MISRA violation C2012-12.1:
The precedence of operators within expressions should be
made explicit.
Enclosed the subexpression in parentheses to maintain
the precedence.
In spite of generic guidance for 3rd party libraries
(https://trustedfirmware-a.readthedocs.io/en/latest/process/coding-style.html#misra-compliance)
libc contains some MISRA-C fixes done by commit d5ccb754af
("libc: Fix some MISRA defects") in 2021.
Also from history it is not clear where libc is
coming from that's why there is no way to fix
violation in base library.
Change-Id: Ic985b418ecae6f61a0be10114deb6076caaa6e5f
Signed-off-by: Nithin G <nithing@amd.com>
Signed-off-by: Maheedhar Bollapalli <maheedharsai.bollapalli@amd.com>
31 lines
929 B
C
31 lines
929 B
C
/*
|
|
* Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <string.h>
|
|
|
|
void *memmove(void *dst, const void *src, size_t len)
|
|
{
|
|
/*
|
|
* The following test makes use of unsigned arithmetic overflow to
|
|
* more efficiently test the condition !(src <= dst && dst < str+len).
|
|
* It also avoids the situation where the more explicit test would give
|
|
* incorrect results were the calculation str+len to overflow (though
|
|
* that issue is probably moot as such usage is probably undefined
|
|
* behaviour and a bug anyway.
|
|
*/
|
|
if (((size_t)dst - (size_t)src) >= len) {
|
|
/* destination not in source data, so can safely use memcpy */
|
|
return memcpy(dst, src, len);
|
|
} else {
|
|
/* copy backwards... */
|
|
const char *end = dst;
|
|
const char *s = (const char *)src + len;
|
|
char *d = (char *)dst + len;
|
|
while (d != end)
|
|
*--d = *--s;
|
|
}
|
|
return dst;
|
|
}
|