mirror of
https://github.com/systemd/systemd
synced 2024-10-04 15:21:01 +00:00
shared/utmp-wtmp: silence gcc warning about strncpy truncation
Unfortunately the warning must be known, or otherwise the pragma generates a warning or an error. So let's do a meson check for it. Is it worth doing this to silence the warning? I think so, because apparently the warning was already emitted by gcc-8.1, and with the recent push in gcc to catch more such cases, we'll most likely only get more of those.
This commit is contained in:
parent
881a62debb
commit
6695c200bd
|
@ -411,11 +411,14 @@ endif
|
|||
|
||||
cpp = ' '.join(cc.cmd_array()) + ' -E'
|
||||
|
||||
has_wstringop_truncation = cc.has_argument('-Wstringop-truncation')
|
||||
|
||||
#####################################################################
|
||||
# compilation result tests
|
||||
|
||||
conf.set('_GNU_SOURCE', true)
|
||||
conf.set('__SANE_USERSPACE_TYPES__', true)
|
||||
conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation)
|
||||
|
||||
conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
|
||||
conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
|
||||
|
|
|
@ -105,6 +105,15 @@
|
|||
_Pragma("GCC diagnostic push"); \
|
||||
_Pragma("GCC diagnostic ignored \"-Wincompatible-pointer-types\"")
|
||||
|
||||
#if HAVE_WSTRINGOP_TRUNCATION
|
||||
# define DISABLE_WARNING_STRINGOP_TRUNCATION \
|
||||
_Pragma("GCC diagnostic push"); \
|
||||
_Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"")
|
||||
#else
|
||||
# define DISABLE_WARNING_STRINGOP_TRUNCATION \
|
||||
_Pragma("GCC diagnostic push")
|
||||
#endif
|
||||
|
||||
#define REENABLE_WARNING \
|
||||
_Pragma("GCC diagnostic pop")
|
||||
|
||||
|
|
|
@ -212,6 +212,12 @@ static inline size_t strlen_ptr(const char *s) {
|
|||
return strlen(s);
|
||||
}
|
||||
|
||||
DISABLE_WARNING_STRINGOP_TRUNCATION;
|
||||
static inline void strncpy_exact(char *buf, const char *src, size_t buf_len) {
|
||||
strncpy(buf, src, buf_len);
|
||||
}
|
||||
REENABLE_WARNING;
|
||||
|
||||
/* Like startswith(), but operates on arbitrary memory blocks */
|
||||
static inline void *memory_startswith(const void *p, size_t sz, const char *token) {
|
||||
size_t n;
|
||||
|
|
|
@ -209,7 +209,7 @@ int utmp_put_init_process(const char *id, pid_t pid, pid_t sid, const char *line
|
|||
copy_suffix(store.ut_id, sizeof(store.ut_id), id);
|
||||
|
||||
if (line)
|
||||
strncpy(store.ut_line, basename(line), sizeof(store.ut_line));
|
||||
strncpy_exact(store.ut_line, line, sizeof(store.ut_line));
|
||||
|
||||
r = write_entry_both(&store);
|
||||
if (r < 0)
|
||||
|
|
Loading…
Reference in a new issue