summaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd/statfsconv.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach/hurd/statfsconv.c')
-rw-r--r--sysdeps/mach/hurd/statfsconv.c46
1 files changed, 28 insertions, 18 deletions
diff --git a/sysdeps/mach/hurd/statfsconv.c b/sysdeps/mach/hurd/statfsconv.c
index daea4dd060..57a06c450f 100644
--- a/sysdeps/mach/hurd/statfsconv.c
+++ b/sysdeps/mach/hurd/statfsconv.c
@@ -1,5 +1,5 @@
/* Convert between `struct statfs' format, and `struct statfs64' format.
- Copyright (C) 2001 Free Software Foundation, Inc.
+ Copyright (C) 2001,02 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,23 +17,33 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <string.h>
-#include <sys/stat.h>
+#include <sys/statfs.h>
+#include <errno.h>
-static inline void
-statfs64_conv (struct statfs *buf, struct statfs64 *buf64)
+static inline int
+statfs64_conv (struct statfs *buf, const struct statfs64 *buf64)
{
- memset (buf64, 0, sizeof (struct statfs64));
-
- buf64->f_type = buf->f_type;
- buf64->f_bsize = buf->f_bsize;
- buf64->f_blocks = buf->f_blocks;
- buf64->f_bfree = buf->f_bfree;
- buf64->f_bavail = buf->f_bavail;
- buf64->f_files = buf->f_files;
- buf64->f_fsid = buf->f_fsid;
- buf64->f_namelen = buf->f_namelen;
- buf64->f_favail = buf->f_favail;
- buf64->f_frsize = buf->f_frsize;
- buf64->f_flag = buf->f_flag;
+# define DO(memb) \
+ buf->memb = buf64->memb; \
+ if (sizeof buf->memb != sizeof buf64->memb && buf->memb != buf64->memb) \
+ { \
+ __set_errno (EOVERFLOW); \
+ return -1; \
+ }
+
+ DO (f_type);
+ DO (f_bsize);
+ DO (f_blocks);
+ DO (f_bfree);
+ DO (f_bavail);
+ DO (f_files);
+ DO (f_fsid);
+ DO (f_namelen);
+ DO (f_favail);
+ DO (f_frsize);
+ DO (f_flag);
+
+# undef DO
+
+ return 0;
}