]> sigrok.org Git - libserialport.git/commitdiff
use readdir() instead of the deprecated readir_r()
authorAurelien Jacobs <redacted>
Fri, 14 Oct 2016 21:50:08 +0000 (23:50 +0200)
committerAurelien Jacobs <redacted>
Fri, 14 Oct 2016 21:58:22 +0000 (23:58 +0200)
readir() is threadsafe on both linux and freebsd anyway.
The rationale behind the readdir_r() deprecation is in the glibc manual:
https://www.gnu.org/software/libc/manual/html_node/Reading_002fClosing-Directory.html

This fixes the following warning with recent glibc:

linux.c: In function ‘list_ports’:
linux.c:197:2: warning: ‘readdir_r’ is deprecated [-Wdeprecated-declarations]
  while (!readdir_r(dir, &entry, &result) && result) {
  ^~~~~

freebsd.c
linux.c

index 387b2f812548a196b90086c3574d86dc6fe8d5a2..b51b731b6071fc3523e0e2369d861c8822130a48 100644 (file)
--- a/freebsd.c
+++ b/freebsd.c
@@ -325,8 +325,7 @@ SP_PRIV enum sp_return get_port_details(struct sp_port *port)
 SP_PRIV enum sp_return list_ports(struct sp_port ***list)
 {
        DIR *dir;
-       struct dirent entry;
-       struct dirent *result;
+       struct dirent *entry;
        struct termios tios;
        char name[PATH_MAX];
        int fd, ret;
@@ -336,20 +335,20 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list)
                RETURN_FAIL("Could not open dir /dev");
 
        DEBUG("Iterating over results");
-       while (!readdir_r(dir, &entry, &result) && result) {
+       while ((entry = readdir(dir))) {
                ret = SP_OK;
-               if (entry.d_type != DT_CHR)
+               if (entry->d_type != DT_CHR)
                        continue;
-               if (strncmp(entry.d_name, "cuaU", 4) != 0)
-                       if (strncmp(entry.d_name, "cuau", 4) != 0)
-                               if (strncmp(entry.d_name, "cuad", 4) != 0)
+               if (strncmp(entry->d_name, "cuaU", 4) != 0)
+                       if (strncmp(entry->d_name, "cuau", 4) != 0)
+                               if (strncmp(entry->d_name, "cuad", 4) != 0)
                                        continue;
-               if (strend(entry.d_name, ".init"))
+               if (strend(entry->d_name, ".init"))
                        continue;
-               if (strend(entry.d_name, ".lock"))
+               if (strend(entry->d_name, ".lock"))
                        continue;
 
-               snprintf(name, sizeof(name), "/dev/%s", entry.d_name);
+               snprintf(name, sizeof(name), "/dev/%s", entry->d_name);
                DEBUG_FMT("Found device %s", name);
 
                /* Check that we can open tty/cua device in rw mode - we need that. */
@@ -370,7 +369,7 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list)
                        continue;
 
                DEBUG_FMT("Found port %s", name);
-               DBG("%s: %s\n", __func__, entry.d_name);
+               DBG("%s: %s\n", __func__, entry->d_name);
 
                *list = list_append(*list, name);
                if (!*list) {
diff --git a/linux.c b/linux.c
index f7dc8fda7febfc97ec21b0934750d672aad773fc..7913394d8f4ba18a5d7144cb3527971732502df5 100644 (file)
--- a/linux.c
+++ b/linux.c
@@ -178,12 +178,12 @@ SP_PRIV enum sp_return get_port_details(struct sp_port *port)
 SP_PRIV enum sp_return list_ports(struct sp_port ***list)
 {
        char name[PATH_MAX], target[PATH_MAX];
-       struct dirent entry, *result;
+       struct dirent *entry;
 #ifdef HAVE_STRUCT_SERIAL_STRUCT
        struct serial_struct serial_info;
        int ioctl_result;
 #endif
-       char buf[sizeof(entry.d_name) + 23];
+       char buf[sizeof(entry->d_name) + 23];
        int len, fd;
        DIR *dir;
        int ret = SP_OK;
@@ -194,19 +194,19 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list)
                RETURN_FAIL("Could not open /sys/class/tty");
 
        DEBUG("Iterating over results");
-       while (!readdir_r(dir, &entry, &result) && result) {
-               snprintf(buf, sizeof(buf), "/sys/class/tty/%s", entry.d_name);
+       while ((entry = readdir(dir))) {
+               snprintf(buf, sizeof(buf), "/sys/class/tty/%s", entry->d_name);
                if (lstat(buf, &statbuf) == -1)
                        continue;
                if (!S_ISLNK(statbuf.st_mode))
-                       snprintf(buf, sizeof(buf), "/sys/class/tty/%s/device", entry.d_name);
+                       snprintf(buf, sizeof(buf), "/sys/class/tty/%s/device", entry->d_name);
                len = readlink(buf, target, sizeof(target));
                if (len <= 0 || len >= (int)(sizeof(target) - 1))
                        continue;
                target[len] = 0;
                if (strstr(target, "virtual"))
                        continue;
-               snprintf(name, sizeof(name), "/dev/%s", entry.d_name);
+               snprintf(name, sizeof(name), "/dev/%s", entry->d_name);
                DEBUG_FMT("Found device %s", name);
                if (strstr(target, "serial8250")) {
                        /*