summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter S. Mazinger <ps.m@gmx.net>2011-04-16 13:51:08 +0200
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2012-06-15 14:00:39 +0200
commit5046a84d82cd8125c981680d449f4d8c7ea5deb8 (patch)
tree1a1be59475114acc57bf2a121069d8154196d47e
parentc6dcc660d3133349f566c1170abd538aafd9ad76 (diff)
umount: make umount2 depend on UCLIBC_LINUX_SPECIFIC
Add hidden umount2 to be used in umount eventually. Rework umount to either use directly umount2 syscall or function. docs say, that mount and umount are also Linux specific Signed-off-by: Peter S. Mazinger <ps.m@gmx.net> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r--include/sys/mount.h3
-rw-r--r--libc/sysdeps/linux/common/umount.c17
-rw-r--r--libc/sysdeps/linux/common/umount2.c7
3 files changed, 10 insertions, 17 deletions
diff --git a/include/sys/mount.h b/include/sys/mount.h
index 57d440f27..f3198e6ae 100644
--- a/include/sys/mount.h
+++ b/include/sys/mount.h
@@ -115,8 +115,11 @@ extern int mount (__const char *__special_file, __const char *__dir,
/* Unmount a filesystem. */
extern int umount (__const char *__special_file) __THROW;
+#ifdef __UCLIBC_LINUX_SPECIFIC__
/* Unmount a filesystem. Force unmounting if FLAGS is set to MNT_FORCE. */
extern int umount2 (__const char *__special_file, int __flags) __THROW;
+libc_hidden_proto(umount2)
+#endif
__END_DECLS
diff --git a/libc/sysdeps/linux/common/umount.c b/libc/sysdeps/linux/common/umount.c
index a084d29bd..916c6c815 100644
--- a/libc/sysdeps/linux/common/umount.c
+++ b/libc/sysdeps/linux/common/umount.c
@@ -9,24 +9,15 @@
#include <sys/syscall.h>
-#if defined __USE_GNU
#include <sys/mount.h>
-
-/* arch provides umount() syscall */
#ifdef __NR_umount
-
_syscall1(int, umount, const char *, specialfile)
-
-/* arch provides umount2() syscall */
#elif defined __NR_umount2
-
-# define __NR___syscall_umount2 __NR_umount2
-static __inline__ _syscall2(int, __syscall_umount2, const char *, special_file, int, flags)
-
+# ifndef __UCLIBC_LINUX_SPECIFIC__
+static __always_inline _syscall2(int, umount2, const char *, special_file, int, flags)
+# endif
int umount(const char *special_file)
{
- return (__syscall_umount2(special_file, 0));
+ return umount2(special_file, 0);
}
-
-#endif
#endif
diff --git a/libc/sysdeps/linux/common/umount2.c b/libc/sysdeps/linux/common/umount2.c
index 2cc4a2338..08e0f3388 100644
--- a/libc/sysdeps/linux/common/umount2.c
+++ b/libc/sysdeps/linux/common/umount2.c
@@ -9,9 +9,8 @@
#include <sys/syscall.h>
-#if defined __USE_GNU
-#include <sys/mount.h>
-#ifdef __NR_umount2 /* Old kernels don't have umount2 */
+#if defined __UCLIBC_LINUX_SPECIFIC__ && defined __NR_umount2
+# include <sys/mount.h>
_syscall2(int, umount2, const char *, special_file, int, flags)
-#endif
+libc_hidden_def(umount2)
#endif