diff options
| -rw-r--r-- | src/udev/net/ethtool-util.c | 19 | 
1 files changed, 10 insertions, 9 deletions
| diff --git a/src/udev/net/ethtool-util.c b/src/udev/net/ethtool-util.c index aaba94c2fb..18d44fc968 100644 --- a/src/udev/net/ethtool-util.c +++ b/src/udev/net/ethtool-util.c @@ -64,25 +64,26 @@ int ethtool_connect(int *ret) {  }  int ethtool_get_driver(int fd, const char *ifname, char **ret) { -        struct ifreq ifr; -        struct ethtool_drvinfo ecmd; +        struct ethtool_drvinfo ecmd = { +                .cmd = ETHTOOL_GDRVINFO +        }; +        struct ifreq ifr = { +                .ifr_data = (void*) &ecmd +        }; +        char *d;          int r; -        zero(ecmd); -        ecmd.cmd = ETHTOOL_GDRVINFO; - -        zero(ifr);          strscpy(ifr.ifr_name, IFNAMSIZ, ifname); -        ifr.ifr_data = (void *)&ecmd;          r = ioctl(fd, SIOCETHTOOL, &ifr);          if (r < 0)                  return -errno; -        *ret = strdup(ecmd.driver); -        if (!*ret) +        d = strdup(ecmd.driver); +        if (!d)                  return -ENOMEM; +        *ret = d;          return 0;  } | 
