Skip to content

Commit 82dbf9a

Browse files
committed
[CR] Fix StrCopy() portability for legacy GCC toolchains
1 parent e574f0d commit 82dbf9a

4 files changed

Lines changed: 28 additions & 4 deletions

File tree

aarch64/coretypes.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1859,11 +1859,17 @@ typedef union {
18591859
#define KMAX(M, m) ((M) > (m) ? (M) : (m))
18601860
#define KMIN(m, M) ((m) < (M) ? (m) : (M))
18611861

1862+
#if defined(__GNUC__) && (__GNUC__ >= 5)
1863+
# define CF_STRNLEN(s, n) __builtin_strnlen((s), (n))
1864+
#else
1865+
# define CF_STRNLEN(s, n) strnlen((s), (n))
1866+
#endif
1867+
18621868
#define StrCopy(_dest, _src, _max) \
18631869
({ \
18641870
size_t __max = (_max); \
18651871
if (__max > 0) { \
1866-
size_t _len = __builtin_strnlen((_src), __max - 1); \
1872+
size_t _len = CF_STRNLEN((_src), __max - 1); \
18671873
__builtin_memcpy((_dest), (_src), _len); \
18681874
(_dest)[_len] = '\0'; \
18691875
} else { \

ppc64le/coretypes.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1594,11 +1594,17 @@ typedef union {
15941594
#define KMAX(M, m) ((M) > (m) ? (M) : (m))
15951595
#define KMIN(m, M) ((m) < (M) ? (m) : (M))
15961596

1597+
#if defined(__GNUC__) && (__GNUC__ >= 5)
1598+
# define CF_STRNLEN(s, n) __builtin_strnlen((s), (n))
1599+
#else
1600+
# define CF_STRNLEN(s, n) strnlen((s), (n))
1601+
#endif
1602+
15971603
#define StrCopy(_dest, _src, _max) \
15981604
({ \
15991605
size_t __max = (_max); \
16001606
if (__max > 0) { \
1601-
size_t _len = __builtin_strnlen((_src), __max - 1); \
1607+
size_t _len = CF_STRNLEN((_src), __max - 1); \
16021608
__builtin_memcpy((_dest), (_src), _len); \
16031609
(_dest)[_len] = '\0'; \
16041610
} else { \

riscv64/coretypes.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1759,11 +1759,17 @@ typedef union {
17591759
#define KMAX(M, m) ((M) > (m) ? (M) : (m))
17601760
#define KMIN(m, M) ((m) < (M) ? (m) : (M))
17611761

1762+
#if defined(__GNUC__) && (__GNUC__ >= 5)
1763+
# define CF_STRNLEN(s, n) __builtin_strnlen((s), (n))
1764+
#else
1765+
# define CF_STRNLEN(s, n) strnlen((s), (n))
1766+
#endif
1767+
17621768
#define StrCopy(_dest, _src, _max) \
17631769
({ \
17641770
size_t __max = (_max); \
17651771
if (__max > 0) { \
1766-
size_t _len = __builtin_strnlen((_src), __max - 1); \
1772+
size_t _len = CF_STRNLEN((_src), __max - 1); \
17671773
__builtin_memcpy((_dest), (_src), _len); \
17681774
(_dest)[_len] = '\0'; \
17691775
} else { \

x86_64/coretypes.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3074,11 +3074,17 @@ typedef union {
30743074
#define KMAX(M, m) ((M) > (m) ? (M) : (m))
30753075
#define KMIN(m, M) ((m) < (M) ? (m) : (M))
30763076

3077+
#if defined(__GNUC__) && (__GNUC__ >= 5)
3078+
# define CF_STRNLEN(s, n) __builtin_strnlen((s), (n))
3079+
#else
3080+
# define CF_STRNLEN(s, n) strnlen((s), (n))
3081+
#endif
3082+
30773083
#define StrCopy(_dest, _src, _max) \
30783084
({ \
30793085
size_t __max = (_max); \
30803086
if (__max > 0) { \
3081-
size_t _len = __builtin_strnlen((_src), __max - 1); \
3087+
size_t _len = CF_STRNLEN((_src), __max - 1); \
30823088
__builtin_memcpy((_dest), (_src), _len); \
30833089
(_dest)[_len] = '\0'; \
30843090
} else { \

0 commit comments

Comments
 (0)