@@ -26,6 +26,30 @@ static char name_llcc[64] = { 0 };
26
26
static char generic_name_ll [64 ] = { 0 };
27
27
static char generic_name_llcc [64 ] = { 0 };
28
28
29
+ /*
30
+ * This snippet borrowed from qemu
31
+ * Copyright (C) Fabrice Bellard 2006-2017 GPL-2.0
32
+ * https://github.com/qemu/qemu/blob/master/util/cutils.c
33
+ * Replaces strncpy
34
+ */
35
+ void
36
+ pstrcpy (char * buf , int buf_size , const char * str )
37
+ {
38
+ int c ;
39
+ char * q = buf ;
40
+
41
+ if (buf_size <= 0 )
42
+ return ;
43
+
44
+ for (;;) {
45
+ c = * str ++ ;
46
+ if (c == 0 || q >= buf + buf_size - 1 )
47
+ break ;
48
+ * q ++ = c ;
49
+ }
50
+ * q = '\0' ;
51
+ }
52
+
29
53
static void
30
54
i18n_init (void )
31
55
{
@@ -48,14 +72,14 @@ i18n_init(void)
48
72
}
49
73
50
74
/* ll_CC */
51
- strncpy (llcc , p , sizeof (llcc ));
75
+ pstrcpy (llcc , sizeof (llcc ), p );
52
76
p = strrchr (llcc , '.' );
53
77
if (p ) {
54
78
* p = '\0' ;
55
79
}
56
80
57
81
/* ll */
58
- strncpy (ll , llcc , sizeof (ll ));
82
+ pstrcpy (ll , sizeof (ll ), llcc );
59
83
p = strrchr (ll , '_' );
60
84
if (p ) {
61
85
* p = '\0' ;
@@ -303,8 +327,8 @@ process_file(char *filename, const char *path)
303
327
return ;
304
328
}
305
329
size_t len = strlen (path );
306
- strncpy (fullname , path , sizeof (fullname ));
307
- strncpy (fullname + len , filename , sizeof (fullname ) - len );
330
+ pstrcpy (fullname , sizeof (fullname ), path );
331
+ pstrcpy (fullname + len , sizeof (fullname ) - len , filename );
308
332
FILE * fp = fopen (fullname , "r" );
309
333
if (!fp ) {
310
334
fprintf (stderr , "warn: could not open file %s" , filename );
0 commit comments