]> sigrok.org Git - libserialport.git/commitdiff
android: Fix build compatibility with NDK platform 21 and up.
authorMartin Ling <redacted>
Sat, 4 Jan 2020 23:00:17 +0000 (23:00 +0000)
committerMartin Ling <redacted>
Sat, 4 Jan 2020 23:00:17 +0000 (23:00 +0000)
In platforms 21 and higher of the NDK, linux/serial.h is available,
which it was not before. This broke the build, because the configure
script would detect the availability of 'struct serial_struct' in that
header and set HAVE_STRUCT_SERIAL_STRUCT, but the #ifndef __ANDROID__
in libserialport_internal.h stopped us actually including the header.

This change fixes things to build with all versions of the NDK, and is
tested with builds for arm from versions 9 to 24.

Version 21 also added availability of tcdrain(), so we also use that
where available, and only use the direct ioctl() method on NDK < 21.

Fixes #1078.

libserialport_internal.h
serialport.c

index 0ad6f701a05a631e7d22daefa4e1f1c1caa6c215..35aa6f9ab703d13f932f1cc3f921672887fc2319 100644 (file)
@@ -68,8 +68,9 @@
 #endif
 #ifdef __linux__
 #include <dirent.h>
-#ifndef __ANDROID__
-#include "linux/serial.h"
+/* Android only has linux/serial.h from platform 21 onwards. */
+#if !(defined(__ANDROID__) && (__ANDROID_API__ < 21))
+#include <linux/serial.h>
 #endif
 #include "linux_termios.h"
 
index 9e56e89aed61c1347bef3b08f867ff2344f7772e..c233b28564c799b66cd3e903cd92dd45a9ea6ded 100644 (file)
@@ -742,7 +742,9 @@ SP_API enum sp_return sp_drain(struct sp_port *port)
 #else
        int result;
        while (1) {
-#ifdef __ANDROID__
+#if defined(__ANDROID__) && (__ANDROID_API__ < 21)
+               /* Android only has tcdrain from platform 21 onwards.
+                * On previous API versions, use the ioctl directly. */
                int arg = 1;
                result = ioctl(port->fd, TCSBRK, &arg);
 #else