about summary refs log tree commit diff
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;
 }