mirror of
git://sigrok.org/libserialport
synced 2023-08-10 21:13:24 +03:00
use readdir() instead of the deprecated readir_r()
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) { ^~~~~
This commit is contained in:
parent
b2359c5c99
commit
df3b70a888
21
freebsd.c
21
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)
|
SP_PRIV enum sp_return list_ports(struct sp_port ***list)
|
||||||
{
|
{
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent entry;
|
struct dirent *entry;
|
||||||
struct dirent *result;
|
|
||||||
struct termios tios;
|
struct termios tios;
|
||||||
char name[PATH_MAX];
|
char name[PATH_MAX];
|
||||||
int fd, ret;
|
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");
|
RETURN_FAIL("Could not open dir /dev");
|
||||||
|
|
||||||
DEBUG("Iterating over results");
|
DEBUG("Iterating over results");
|
||||||
while (!readdir_r(dir, &entry, &result) && result) {
|
while ((entry = readdir(dir))) {
|
||||||
ret = SP_OK;
|
ret = SP_OK;
|
||||||
if (entry.d_type != DT_CHR)
|
if (entry->d_type != DT_CHR)
|
||||||
continue;
|
continue;
|
||||||
if (strncmp(entry.d_name, "cuaU", 4) != 0)
|
if (strncmp(entry->d_name, "cuaU", 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)
|
if (strncmp(entry->d_name, "cuad", 4) != 0)
|
||||||
continue;
|
continue;
|
||||||
if (strend(entry.d_name, ".init"))
|
if (strend(entry->d_name, ".init"))
|
||||||
continue;
|
continue;
|
||||||
if (strend(entry.d_name, ".lock"))
|
if (strend(entry->d_name, ".lock"))
|
||||||
continue;
|
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);
|
DEBUG_FMT("Found device %s", name);
|
||||||
|
|
||||||
/* Check that we can open tty/cua device in rw mode - we need that. */
|
/* 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;
|
continue;
|
||||||
|
|
||||||
DEBUG_FMT("Found port %s", name);
|
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);
|
*list = list_append(*list, name);
|
||||||
if (!*list) {
|
if (!*list) {
|
||||||
|
12
linux.c
12
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)
|
SP_PRIV enum sp_return list_ports(struct sp_port ***list)
|
||||||
{
|
{
|
||||||
char name[PATH_MAX], target[PATH_MAX];
|
char name[PATH_MAX], target[PATH_MAX];
|
||||||
struct dirent entry, *result;
|
struct dirent *entry;
|
||||||
#ifdef HAVE_STRUCT_SERIAL_STRUCT
|
#ifdef HAVE_STRUCT_SERIAL_STRUCT
|
||||||
struct serial_struct serial_info;
|
struct serial_struct serial_info;
|
||||||
int ioctl_result;
|
int ioctl_result;
|
||||||
#endif
|
#endif
|
||||||
char buf[sizeof(entry.d_name) + 23];
|
char buf[sizeof(entry->d_name) + 23];
|
||||||
int len, fd;
|
int len, fd;
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
int ret = SP_OK;
|
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");
|
RETURN_FAIL("Could not open /sys/class/tty");
|
||||||
|
|
||||||
DEBUG("Iterating over results");
|
DEBUG("Iterating over results");
|
||||||
while (!readdir_r(dir, &entry, &result) && result) {
|
while ((entry = readdir(dir))) {
|
||||||
snprintf(buf, sizeof(buf), "/sys/class/tty/%s", entry.d_name);
|
snprintf(buf, sizeof(buf), "/sys/class/tty/%s", entry->d_name);
|
||||||
if (lstat(buf, &statbuf) == -1)
|
if (lstat(buf, &statbuf) == -1)
|
||||||
continue;
|
continue;
|
||||||
if (!S_ISLNK(statbuf.st_mode))
|
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));
|
len = readlink(buf, target, sizeof(target));
|
||||||
if (len <= 0 || len >= (int)(sizeof(target) - 1))
|
if (len <= 0 || len >= (int)(sizeof(target) - 1))
|
||||||
continue;
|
continue;
|
||||||
target[len] = 0;
|
target[len] = 0;
|
||||||
if (strstr(target, "virtual"))
|
if (strstr(target, "virtual"))
|
||||||
continue;
|
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);
|
DEBUG_FMT("Found device %s", name);
|
||||||
if (strstr(target, "serial8250")) {
|
if (strstr(target, "serial8250")) {
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user