summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2019-01-29 20:32:53 -0800
committerPádraig Brady <P@draigBrady.com>2019-02-03 17:18:08 -0800
commit2e8f885a2a853fea0ef56b663741c0947f9ba7ca (patch)
treed363c09dbc212036da6828497ce8d7d3e9ab837b
parent90933c8eb0efc2a718fae44a22e89fc4e0f49cc9 (diff)
downloadcoreutils-2e8f885a2a853fea0ef56b663741c0947f9ba7ca.tar.gz
stat,tail: fix android build and support inotify
* src/extract-magic: Treat android like linux, which fixes the build by ensuring the constants are defined. * src/stat.c: Support all constants on android, including the android specific "sdcardfs". * src/tail.c: Fix inclusion of statfs headers to be independent of inotify availability, as fremote() is used on linux even if inotify has been disabled. Also enable fremote() on android. * NEWS: Mention the improvment. Fixes https://bugs.gnu.org/34239
-rw-r--r--NEWS5
-rw-r--r--src/extract-magic2
-rw-r--r--src/stat.c4
-rw-r--r--src/tail.c7
4 files changed, 14 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 4b6b8bff8..e6ccb1949 100644
--- a/NEWS
+++ b/NEWS
@@ -69,6 +69,11 @@ GNU coreutils NEWS -*- outline -*-
and encodes and decodes printable text using various common encodings:
base64,base64url,base32,base32hex,base16,base2,z85.
+** Improvements
+
+ stat and tail now know about the "sdcardfs" file system on Android.
+ stat -f -c%T now reports the file system type, and tail -f uses inotify.
+
* Noteworthy changes in release 8.30 (2018-07-01) [stable]
diff --git a/src/extract-magic b/src/extract-magic
index 48c38dff5..892c1db1d 100644
--- a/src/extract-magic
+++ b/src/extract-magic
@@ -125,7 +125,7 @@ EOF
print $emit_magic ? $magic_comment : $map_comment;
$emit_magic
- and print "\n#if defined __linux__\n";
+ and print "\n#if defined __linux__ || defined __ANDROID__\n";
$emit_magic
or print "static inline int\n"
. "is_local_fs_type (unsigned long int magic)\n"
diff --git a/src/stat.c b/src/stat.c
index f17246d30..c8f180948 100644
--- a/src/stat.c
+++ b/src/stat.c
@@ -235,7 +235,7 @@ human_fstype (STRUCT_STATVFS const *statfsbuf)
#else
switch (statfsbuf->f_type)
{
-# if defined __linux__
+# if defined __linux__ || defined __ANDROID__
/* Compare with what's in libc:
f=/a/libc/sysdeps/unix/sysv/linux/linux_fsinfo.h
@@ -450,6 +450,8 @@ human_fstype (STRUCT_STATVFS const *statfsbuf)
return "romfs";
case S_MAGIC_RPC_PIPEFS: /* 0x67596969 local */
return "rpc_pipefs";
+ case S_MAGIC_SDCARDFS: /* 0x5DCA2DF5 local */
+ return "sdcardfs";
case S_MAGIC_SECURITYFS: /* 0x73636673 local */
return "securityfs";
case S_MAGIC_SELINUX: /* 0xF97CFF8C local */
diff --git a/src/tail.c b/src/tail.c
index dee827bc8..8fab0499d 100644
--- a/src/tail.c
+++ b/src/tail.c
@@ -57,8 +57,10 @@
# include <sys/inotify.h>
/* 'select' is used by tail_forever_inotify. */
# include <sys/select.h>
+#endif
-/* inotify needs to know if a file is local. */
+/* Linux can optimize the handling of local files. */
+#if defined __linux__ || defined __ANDROID__
# include "fs.h"
# include "fs-is-local.h"
# if HAVE_SYS_STATFS_H
@@ -938,7 +940,8 @@ fremote (int fd, const char *name)
{
bool remote = true; /* be conservative (poll by default). */
-#if HAVE_FSTATFS && HAVE_STRUCT_STATFS_F_TYPE && defined __linux__
+#if HAVE_FSTATFS && HAVE_STRUCT_STATFS_F_TYPE \
+ && (defined __linux__ || defined __ANDROID__)
struct statfs buf;
int err = fstatfs (fd, &buf);
if (err != 0)