X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=linux.c;fp=linux.c;h=d70a45f90a2260041c9d1722daa192bb69f55faa;hb=5bd33b7c8be499b970192d144409bec7072fc701;hp=9274e365040ad9f90ee7a6d09cdeaa372afe9571;hpb=970f279ae4767819a816573ae354813d37d5091d;p=libserialport.git diff --git a/linux.c b/linux.c index 9274e36..d70a45f 100644 --- a/linux.c +++ b/linux.c @@ -161,6 +161,9 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list) char name[PATH_MAX], target[PATH_MAX]; struct dirent entry, *result; struct serial_struct serial_info; +#ifndef HAVE_READLINKAT + char buf[sizeof(entry.d_name) + 16]; +#endif int len, fd, ioctl_result; DIR *dir; int ret = SP_OK; @@ -171,7 +174,12 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list) DEBUG("Iterating over results"); while (!readdir_r(dir, &entry, &result) && result) { +#ifdef HAVE_READLINKAT len = readlinkat(dirfd(dir), entry.d_name, target, sizeof(target)); +#else + snprintf(buf, sizeof(buf), "/sys/class/tty/%s", entry.d_name); + len = readlink(buf, target, sizeof(target)); +#endif if (len <= 0 || len >= (int) sizeof(target)-1) continue; target[len] = 0;