shared/dm-util: use strncpy_exact() to silence gcc

With gcc-9.1.1-2.fc31.x86_64 and -Doptimization=2:
../src/shared/dm-util.c: In function ‘dm_deferred_remove’:
../src/shared/dm-util.c:35:9: warning: ‘strncpy’ specified bound 128 equals destination size [-Wstringop-truncation]
   35 |         strncpy(dm.name, name, sizeof(dm.name));
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

gcc is plain wrong here, because we checked strlen(name) a few lines above, so
there can be no truncation and even the terminator always fits. But let's avoid
the warning.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2019-07-10 10:22:48 +02:00
parent f34635bcda
commit 706fb34851

View file

@ -5,6 +5,7 @@
#include "dm-util.h"
#include "fd-util.h"
#include "string-util.h"
int dm_deferred_remove(const char *name) {
@ -25,14 +26,14 @@ int dm_deferred_remove(const char *name) {
/* Unfortunately, libcryptsetup doesn't provide a proper API for this, hence call the ioctl()
* directly. */
if (strlen(name) > sizeof(dm.name)-1)
if (strlen(name) >= sizeof(dm.name))
return -ENODEV; /* A device with a name longer than this cannot possibly exist */
fd = open("/dev/mapper/control", O_RDWR|O_CLOEXEC);
if (fd < 0)
return -errno;
strncpy(dm.name, name, sizeof(dm.name));
strncpy_exact(dm.name, name, sizeof(dm.name));
if (ioctl(fd, DM_DEV_REMOVE, &dm))
return -errno;