From: Marcus Comstedt Date: Thu, 3 Jul 2014 22:04:31 +0000 (+0200) Subject: Avoid use of struct serial_struct on systems which don't have it (Android) X-Git-Tag: libserialport-0.1.1~119 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=12056e2f75c01a8512d046ce5d8ed9d72e7cf22b;p=libserialport.git Avoid use of struct serial_struct on systems which don't have it (Android) This fixes bug #376. --- diff --git a/configure.ac b/configure.ac index 22c47ce..d8f8148 100644 --- a/configure.ac +++ b/configure.ac @@ -122,6 +122,10 @@ AC_CHECK_MEMBERS([struct termios2.c_ispeed, struct termios2.c_ospeed], # Check for readlinkat. AC_CHECK_FUNC([readlinkat], [AC_DEFINE(HAVE_READLINKAT, 1)], []) +# Check for serial_struct. +AC_CHECK_TYPE([struct serial_struct], [AC_DEFINE(HAVE_SERIAL_STRUCT, 1)], + [], [[#include ]]) + saved="$CFLAGS"; CFLAGS="$CFLAGS -Werror" AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ __attribute__((visibility("hidden"))) void foo(void) { } diff --git a/linux.c b/linux.c index d70a45f..9ccd3b3 100644 --- a/linux.c +++ b/linux.c @@ -160,11 +160,14 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list) { char name[PATH_MAX], target[PATH_MAX]; struct dirent entry, *result; +#ifdef HAVE_SERIAL_STRUCT struct serial_struct serial_info; + int ioctl_result; +#endif #ifndef HAVE_READLINKAT char buf[sizeof(entry.d_name) + 16]; #endif - int len, fd, ioctl_result; + int len, fd; DIR *dir; int ret = SP_OK; @@ -196,8 +199,11 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list) DEBUG("open failed, skipping"); continue; } +#ifdef HAVE_SERIAL_STRUCT ioctl_result = ioctl(fd, TIOCGSERIAL, &serial_info); +#endif close(fd); +#ifdef HAVE_SERIAL_STRUCT if (ioctl_result != 0) { DEBUG("ioctl failed, skipping"); continue; @@ -206,6 +212,7 @@ SP_PRIV enum sp_return list_ports(struct sp_port ***list) DEBUG("port type is unknown, skipping"); continue; } +#endif } DEBUG("Found port %s", name); *list = list_append(*list, name);