summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2020-05-16 00:30:23 +0200
committerGiampaolo Rodola <g.rodola@gmail.com>2020-05-16 00:30:23 +0200
commit9efb453e7163690c82226be3440cd8cb6bdffb5b (patch)
tree13228fabd611041587a19a39a93da5a8b582d227
parentc1f70d0a5039d340ccb4d5a66a75dbfcd63bd516 (diff)
downloadpsutil-9efb453e7163690c82226be3440cd8cb6bdffb5b.tar.gz
add strncpy / PSUTIL_STRNCPY variant which adds null terminator (fix gcc-9 warning)
-rw-r--r--psutil/_psutil_aix.c2
-rw-r--r--psutil/_psutil_common.h5
-rw-r--r--psutil/_psutil_linux.c2
-rw-r--r--psutil/_psutil_posix.c8
-rw-r--r--psutil/_psutil_sunos.c4
5 files changed, 13 insertions, 8 deletions
diff --git a/psutil/_psutil_aix.c b/psutil/_psutil_aix.c
index cf79d307..791e831e 100644
--- a/psutil/_psutil_aix.c
+++ b/psutil/_psutil_aix.c
@@ -679,7 +679,7 @@ psutil_net_if_stats(PyObject* self, PyObject* args) {
if (sock == -1)
goto error;
- strncpy(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
+ PSUTIL_STRNCPY(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
// is up?
ret = ioctl(sock, SIOCGIFFLAGS, &ifr);
diff --git a/psutil/_psutil_common.h b/psutil/_psutil_common.h
index 34c428c0..2408c9f6 100644
--- a/psutil/_psutil_common.h
+++ b/psutil/_psutil_common.h
@@ -15,6 +15,11 @@ extern int PSUTIL_DEBUG;
// a signaler for connections without an actual status
static const int PSUTIL_CONN_NONE = 128;
+// strncpy() variant which appends a null terminator.
+#define PSUTIL_STRNCPY(dst, src, n) \
+ strncpy(dst, src, n - 1); \
+ dst[n - 1] = '\0'
+
// ====================================================================
// --- Backward compatibility with missing Python.h APIs
// ====================================================================
diff --git a/psutil/_psutil_linux.c b/psutil/_psutil_linux.c
index 5f00454b..49e86997 100644
--- a/psutil/_psutil_linux.c
+++ b/psutil/_psutil_linux.c
@@ -500,7 +500,7 @@ psutil_net_if_duplex_speed(PyObject* self, PyObject* args) {
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1)
return PyErr_SetFromOSErrnoWithSyscall("socket()");
- strncpy(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
+ PSUTIL_STRNCPY(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
// duplex and speed
memset(&ethcmd, 0, sizeof ethcmd);
diff --git a/psutil/_psutil_posix.c b/psutil/_psutil_posix.c
index 38483b3b..f7f8b92d 100644
--- a/psutil/_psutil_posix.c
+++ b/psutil/_psutil_posix.c
@@ -356,10 +356,10 @@ psutil_net_if_mtu(PyObject *self, PyObject *args) {
goto error;
#ifdef PSUTIL_SUNOS10
- strncpy(lifr.lifr_name, nic_name, sizeof(lifr.lifr_name));
+ PSUTIL_STRNCPY(lifr.lifr_name, nic_name, sizeof(lifr.lifr_name));
ret = ioctl(sock, SIOCGIFMTU, &lifr);
#else
- strncpy(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
+ PSUTIL_STRNCPY(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
ret = ioctl(sock, SIOCGIFMTU, &ifr);
#endif
if (ret == -1)
@@ -398,7 +398,7 @@ psutil_net_if_flags(PyObject *self, PyObject *args) {
if (sock == -1)
goto error;
- strncpy(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
+ PSUTIL_STRNCPY(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
ret = ioctl(sock, SIOCGIFFLAGS, &ifr);
if (ret == -1)
goto error;
@@ -578,7 +578,7 @@ psutil_net_if_duplex_speed(PyObject *self, PyObject *args) {
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1)
return PyErr_SetFromErrno(PyExc_OSError);
- strncpy(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
+ PSUTIL_STRNCPY(ifr.ifr_name, nic_name, sizeof(ifr.ifr_name));
// speed / duplex
memset(&ifmed, 0, sizeof(struct ifmediareq));
diff --git a/psutil/_psutil_sunos.c b/psutil/_psutil_sunos.c
index 6548640b..82114c8c 100644
--- a/psutil/_psutil_sunos.c
+++ b/psutil/_psutil_sunos.c
@@ -1024,7 +1024,7 @@ psutil_net_io_counters(PyObject *self, PyObject *args) {
goto next;
// check if this is a network interface by sending a ioctl
- strncpy(ifr.lifr_name, ksp->ks_name, sizeof(ifr.lifr_name));
+ PSUTIL_STRNCPY(ifr.lifr_name, ksp->ks_name, sizeof(ifr.lifr_name));
ret = ioctl(sock, SIOCGLIFFLAGS, &ifr);
if (ret == -1)
goto next;
@@ -1515,7 +1515,7 @@ psutil_net_if_stats(PyObject* self, PyObject* args) {
if (strcmp(ksp->ks_class, "net") != 0)
continue;
- strncpy(ifr.lifr_name, ksp->ks_name, sizeof(ifr.lifr_name));
+ PSUTIL_STRNCPY(ifr.lifr_name, ksp->ks_name, sizeof(ifr.lifr_name));
ret = ioctl(sock, SIOCGLIFFLAGS, &ifr);
if (ret == -1)
continue; // not a network interface