Avoid use of struct serial_struct on systems which don't have it (Android)

This fixes bug #376.
This commit is contained in:
Marcus Comstedt 2014-07-04 00:04:31 +02:00 committed by Uwe Hermann
parent 5bd33b7c8b
commit 12056e2f75
2 changed files with 12 additions and 1 deletions

View File

@ -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 <linux/serial.h>]])
saved="$CFLAGS"; CFLAGS="$CFLAGS -Werror"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
__attribute__((visibility("hidden"))) void foo(void) { }

View File

@ -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);