1 /*
2 * SPDX-License-Identifier: BSD-3-Clause
3 *
4 * Copyright (c) 2024, STMicroelectronics
5 *
6 */
7
8 #include <internal/utilities.h>
9 #include <metal/io.h>
10 #include <metal/utilities.h>
11
safe_strcpy(char * dst,size_t d_size,const char * src,size_t s_size)12 size_t safe_strcpy(char *dst, size_t d_size, const char *src, size_t s_size)
13 {
14 size_t size = metal_min(s_size, d_size);
15 size_t nleft = size + 1;
16 char *d = dst;
17
18 if (!d_size)
19 return 0;
20
21 /* Copy as many bytes as will fit. */
22 while (--nleft != 0) {
23 *dst = *src++;
24 if (*dst++ == '\0')
25 break;
26 }
27
28 /* Fill last characters with '\0' */
29 if (size < d_size)
30 memset(dst, '\0', d_size - size + nleft);
31 else
32 d[d_size - 1] = '\0';
33
34 return size - nleft;
35 }
36