From: Pádraig Brady Date: Wed, 30 Jan 2019 04:32:53 +0000 (-0800) Subject: stat,tail: fix android build and support inotify X-Git-Tag: v8.31~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e8f885a2a853fea0ef56b663741c0947f9ba7ca;p=thirdparty%2Fcoreutils.git 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 --- diff --git a/NEWS b/NEWS index 4b6b8bff8d..e6ccb19495 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 48c38dff5a..892c1db1d6 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 f17246d30a..c8f1809485 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 dee827bc8f..8fab0499dc 100644 --- a/src/tail.c +++ b/src/tail.c @@ -57,8 +57,10 @@ # include /* 'select' is used by tail_forever_inotify. */ # include +#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)