bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
From: Bruno Haible <bruno@clisp.org>
To: bug-gnulib@gnu.org
Subject: mountlist: Use Linux code on Android
Date: Sun, 27 Jan 2019 00:26:31 +0100	[thread overview]
Message-ID: <2040804.EzfLWZXfGv@omega> (raw)
In-Reply-To: <2310297.vOPnbdt5Vf@omega>

The Linux code that reads from /proc is also applicable on Android.

Notes:
- This compiler ("gcc -mandroid") defines the preprocessor symbol __ANDROID__
  but does NOT define __linux__.
- This version of Android does not have setmntent and endmntent, but these
  functions are easy to substitute.
- This version of Android also does not have getline, so this requires a
  dependency to the 'getline' module.


2019-01-26  Bruno Haible  <bruno@clisp.org>

	mountlist: Use Linux code on Android.
	* lib/mountlist.c (setmntent, endmntent): Define fallbacks.
	(unescape_tab, read_file_system_list): Enable Linux code on Android
	as well.
	* m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Test for setmntent
	and endmntent.
	* modules/mountlist (Depends-on): Add 'getline'.

diff --git a/lib/mountlist.c b/lib/mountlist.c
index 937b3bb..9b54a2c 100644
--- a/lib/mountlist.c
+++ b/lib/mountlist.c
@@ -123,6 +123,15 @@
 # include <sys/mntent.h>
 #endif
 
+#ifdef MOUNTED_GETMNTENT1
+# if !HAVE_SETMNTENT            /* Android <= 4.4 */
+#  define setmntent(fp,mode) fopen (fp, mode)
+# endif
+# if !HAVE_ENDMNTENT            /* Android <= 4.4 */
+#  define endmntent(fp) fclose (fp)
+# endif
+#endif
+
 #ifndef HAVE_HASMNTOPT
 # define hasmntopt(mnt, opt) ((char *) 0)
 #endif
@@ -383,7 +392,7 @@ dev_from_mount_options (char const *mount_options)
 
 #endif
 
-#if defined MOUNTED_GETMNTENT1 && defined __linux__ /* GNU/Linux, Android */
+#if defined MOUNTED_GETMNTENT1 && (defined __linux__ || defined __ANDROID__) /* GNU/Linux, Android */
 
 /* Unescape the paths in mount tables.
    STR is updated in place.  */
@@ -429,7 +438,7 @@ read_file_system_list (bool need_fs_type)
   {
     FILE *fp;
 
-# ifdef __linux__
+# if defined __linux__ || defined __ANDROID__
     /* Try parsing mountinfo first, as that make device IDs available.
        Note we could use libmount routines to simplify this parsing a little
        (and that code is in previous versions of this function), however
@@ -522,7 +531,7 @@ read_file_system_list (bool need_fs_type)
           goto free_then_fail;
       }
     else /* fallback to /proc/self/mounts (/etc/mtab).  */
-# endif /* __linux __ */
+# endif /* __linux __ || __ANDROID__ */
       {
         struct mntent *mnt;
         char const *table = MOUNTED;
diff --git a/m4/ls-mntd-fs.m4 b/m4/ls-mntd-fs.m4
index ba38439..05474c2 100644
--- a/m4/ls-mntd-fs.m4
+++ b/m4/ls-mntd-fs.m4
@@ -1,4 +1,4 @@
-# serial 37
+# serial 38
 # How to list mounted file systems.
 
 # Copyright (C) 1998-2004, 2006, 2009-2019 Free Software Foundation, Inc.
@@ -123,7 +123,7 @@ $ac_includes_default
           [Define if there is a function named getmntent for reading the list
            of mounted file systems, and that function takes a single argument.
            (4.3BSD, SunOS, HP-UX, Irix)])
-        AC_CHECK_FUNCS([hasmntopt])
+        AC_CHECK_FUNCS([setmntent endmntent hasmntopt])
       fi
     fi
 
diff --git a/modules/mountlist b/modules/mountlist
index 1e7d22a..81ab2bf 100644
--- a/modules/mountlist
+++ b/modules/mountlist
@@ -9,6 +9,7 @@ m4/fstypename.m4
 m4/mountlist.m4
 
 Depends-on:
+getline
 stdbool
 stdint
 strstr-simple



      reply	other threads:[~2019-01-26 23:41 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-26 21:59 mountlist: Port better to Android Bruno Haible
2019-01-26 23:26 ` Bruno Haible [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://lists.gnu.org/mailman/listinfo/bug-gnulib

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2040804.EzfLWZXfGv@omega \
    --to=bruno@clisp.org \
    --cc=bug-gnulib@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).