Skip to content

Commit f9e7ff9

Browse files
morimototorvalds
authored andcommitted
sh: use generic strncpy()
Current SH will get below warning at strncpy() In file included from ${LINUX}/arch/sh/include/asm/string.h:3, from ${LINUX}/include/linux/string.h:20, from ${LINUX}/include/linux/bitmap.h:9, from ${LINUX}/include/linux/nodemask.h:95, from ${LINUX}/include/linux/mmzone.h:17, from ${LINUX}/include/linux/gfp.h:6, from ${LINUX}/innclude/linux/slab.h:15, from ${LINUX}/linux/drivers/mmc/host/vub300.c:38: ${LINUX}/drivers/mmc/host/vub300.c: In function 'new_system_port_status': ${LINUX}/arch/sh/include/asm/string_32.h:51:42: warning: array subscript\ 80 is above array bounds of 'char[26]' [-Warray-bounds] : "0" (__dest), "1" (__src), "r" (__src+__n) ~~~~~^~~~ In general, strncpy() should behave like below. char dest[10]; char *src = "12345"; strncpy(dest, src, 10); // dest = {'1', '2', '3', '4', '5', '\0','\0','\0','\0','\0'} But, current SH strnpy() has 2 issues. 1st is it will access to out-of-memory (= src + 10). 2nd is it needs big fixup for it, and maintenance __asm__ code is difficult. To solve these issues, this patch simply uses generic strncpy() instead of architecture specific one. Signed-off-by: Kuninori Morimoto <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Cc: Alan Modra <[email protected]> Cc: Bin Meng <[email protected]> Cc: Chen Zhou <[email protected]> Cc: Geert Uytterhoeven <[email protected]> Cc: John Paul Adrian Glaubitz <[email protected]> Cc: Krzysztof Kozlowski <[email protected]> Cc: Rich Felker <[email protected]> Cc: Romain Naour <[email protected]> Cc: Sam Ravnborg <[email protected]> Cc: Yoshinori Sato <[email protected]> Link: https://marc.info/?l=linux-renesas-soc&m=157664657013309 Signed-off-by: Linus Torvalds <[email protected]>
1 parent a8e3943 commit f9e7ff9

File tree

1 file changed

+0
-26
lines changed

1 file changed

+0
-26
lines changed

arch/sh/include/asm/string_32.h

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,32 +28,6 @@ static inline char *strcpy(char *__dest, const char *__src)
2828
return __xdest;
2929
}
3030

31-
#define __HAVE_ARCH_STRNCPY
32-
static inline char *strncpy(char *__dest, const char *__src, size_t __n)
33-
{
34-
register char *__xdest = __dest;
35-
unsigned long __dummy;
36-
37-
if (__n == 0)
38-
return __xdest;
39-
40-
__asm__ __volatile__(
41-
"1:\n"
42-
"mov.b @%1+, %2\n\t"
43-
"mov.b %2, @%0\n\t"
44-
"cmp/eq #0, %2\n\t"
45-
"bt/s 2f\n\t"
46-
" cmp/eq %5,%1\n\t"
47-
"bf/s 1b\n\t"
48-
" add #1, %0\n"
49-
"2:"
50-
: "=r" (__dest), "=r" (__src), "=&z" (__dummy)
51-
: "0" (__dest), "1" (__src), "r" (__src+__n)
52-
: "memory", "t");
53-
54-
return __xdest;
55-
}
56-
5731
#define __HAVE_ARCH_STRCMP
5832
static inline int strcmp(const char *__cs, const char *__ct)
5933
{

0 commit comments

Comments
 (0)