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