summaryrefslogtreecommitdiff
path: root/libc
diff options
context:
space:
mode:
Diffstat (limited to 'libc')
-rw-r--r--libc/sysdeps/linux/arm/bits/kernel_stat.h2
-rw-r--r--libc/sysdeps/linux/common/mknod.c14
-rw-r--r--libc/sysdeps/linux/common/ustat.c13
-rw-r--r--libc/sysdeps/linux/h8300/bits/kernel_stat.h3
-rw-r--r--libc/sysdeps/linux/i386/bits/kernel_stat.h7
5 files changed, 21 insertions, 18 deletions
diff --git a/libc/sysdeps/linux/arm/bits/kernel_stat.h b/libc/sysdeps/linux/arm/bits/kernel_stat.h
index ebac6f5ff..2533573b8 100644
--- a/libc/sysdeps/linux/arm/bits/kernel_stat.h
+++ b/libc/sysdeps/linux/arm/bits/kernel_stat.h
@@ -18,7 +18,7 @@ struct kernel_stat {
#else
unsigned long st_dev;
#endif
- unsigned long st_ino;
+ unsigned long st_ino;
unsigned short st_mode;
unsigned short st_nlink;
unsigned short st_uid;
diff --git a/libc/sysdeps/linux/common/mknod.c b/libc/sysdeps/linux/common/mknod.c
index 5c7f9a5fd..7428e8be8 100644
--- a/libc/sysdeps/linux/common/mknod.c
+++ b/libc/sysdeps/linux/common/mknod.c
@@ -11,14 +11,18 @@
#include <sys/stat.h>
#include <sys/sysmacros.h>
-/* libc_hidden_proto(mknod) */
-
#define __NR___syscall_mknod __NR_mknod
-static __inline__ _syscall3(int, __syscall_mknod, const char *, path,
- __kernel_mode_t, mode, __kernel_dev_t, dev)
+/* kernel's fs/namei.c defines this:
+ * long sys_mknod(const char __user *filename, int mode, unsigned dev),
+ * so, no __kernel_mode_t and no __kernel_dev_t, please.
+ */
+static __inline__ _syscall3(int, __syscall_mknod,
+ const char *, path,
+ int /* __kernel_mode_t */, mode,
+ unsigned /* __kernel_dev_t */, dev)
int mknod(const char *path, mode_t mode, dev_t dev)
{
- return __syscall_mknod(path, mode, (__kernel_dev_t)dev);
+ return __syscall_mknod(path, mode, dev);
}
libc_hidden_def(mknod)
diff --git a/libc/sysdeps/linux/common/ustat.c b/libc/sysdeps/linux/common/ustat.c
index 09edaa369..e97fa76bb 100644
--- a/libc/sysdeps/linux/common/ustat.c
+++ b/libc/sysdeps/linux/common/ustat.c
@@ -12,14 +12,15 @@
#include <sys/sysmacros.h>
#define __NR___syscall_ustat __NR_ustat
+/* Kernel's fs/super.c defines this:
+ * long sys_ustat(unsigned dev, struct ustat __user * ubuf),
+ * thus we use unsigned, not __kernel_dev_t.
+ */
static __inline__ _syscall2(int, __syscall_ustat,
- unsigned short int, kdev_t, struct ustat *, ubuf)
+ unsigned, kdev_t,
+ struct ustat *, ubuf)
int ustat(dev_t dev, struct ustat *ubuf)
{
- /* We must convert the dev_t value to a __kernel_dev_t */
- __kernel_dev_t k_dev;
-
- k_dev = ((major(dev) & 0xff) << 8) | (minor(dev) & 0xff);
- return __syscall_ustat(k_dev, ubuf);
+ return __syscall_ustat(dev, ubuf);
}
diff --git a/libc/sysdeps/linux/h8300/bits/kernel_stat.h b/libc/sysdeps/linux/h8300/bits/kernel_stat.h
index 9468292e5..c779ba378 100644
--- a/libc/sysdeps/linux/h8300/bits/kernel_stat.h
+++ b/libc/sysdeps/linux/h8300/bits/kernel_stat.h
@@ -33,8 +33,7 @@ struct kernel_stat {
};
struct kernel_stat64 {
- unsigned char __pad0[6];
- unsigned short st_dev;
+ unsigned long long st_dev;
unsigned char __pad1[2];
#define _HAVE_STAT64___ST_INO
unsigned long __st_ino;
diff --git a/libc/sysdeps/linux/i386/bits/kernel_stat.h b/libc/sysdeps/linux/i386/bits/kernel_stat.h
index 20eb6d2ef..6bec170b8 100644
--- a/libc/sysdeps/linux/i386/bits/kernel_stat.h
+++ b/libc/sysdeps/linux/i386/bits/kernel_stat.h
@@ -10,8 +10,7 @@
* different opinion on the subject... */
struct kernel_stat {
- unsigned short st_dev;
- unsigned short __pad1;
+ unsigned long st_dev;
unsigned long st_ino;
unsigned short st_mode;
unsigned short st_nlink;
@@ -33,8 +32,8 @@ struct kernel_stat {
};
struct kernel_stat64 {
- unsigned short st_dev;
- unsigned char __pad0[10];
+ unsigned long long st_dev;
+ unsigned char __pad0[4];
#define _HAVE_STAT64___ST_INO
unsigned long __st_ino;
unsigned int st_mode;