2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / support / fstab.c
index f6ab2cc27d9d046bf2d3bbd20aafc432e9c7583e..c9ff50547a84f6dae119375892199b9fc249110e 100644 (file)
@@ -15,7 +15,9 @@
 
 #include "mph.h"
 
-#ifdef HAVE_FSTAB_H
+#if defined (HAVE_CHECKLIST_H)
+#include <checklist.h>
+#elif defined (HAVE_FSTAB_H)
 #include <fstab.h>
 #endif /* def HAVE_FSTAB_H */
 
@@ -37,7 +39,25 @@ struct Mono_Posix_Syscall__Fstab {
        char  *_fs_buf_;
 };
 
-#ifdef HAVE_FSTAB_H
+#ifdef HAVE_CHECKLIST_H
+
+typedef struct checklist mph_fstab;
+
+static const size_t
+fstab_offsets[] = {
+       offsetof (struct checklist, fs_spec),
+       offsetof (struct checklist, fs_dir),
+       offsetof (struct checklist, fs_type)
+};
+
+static const size_t
+mph_fstab_offsets[] = {
+       offsetof (struct Mono_Posix_Syscall__Fstab, fs_spec),
+       offsetof (struct Mono_Posix_Syscall__Fstab, fs_file),
+       offsetof (struct Mono_Posix_Syscall__Fstab, fs_type)
+};
+
+#elif defined (HAVE_FSTAB_H)
 
 typedef struct fstab mph_fstab;
 
@@ -59,6 +79,10 @@ mph_fstab_offsets[] = {
        offsetof (struct Mono_Posix_Syscall__Fstab, fs_type)
 };
 
+#endif /* def HAVE_FSTAB_H */
+
+#if defined (HAVE_CHECKLIST_H) || defined (HAVE_FSTAB_H)
+
 /*
  * Copy the native `fstab' structure to it's managed representation.
  *
@@ -66,9 +90,12 @@ mph_fstab_offsets[] = {
  * memory block (stored in _fs_buf_).
  */
 static int
-copy_fstab (struct Mono_Posix_Syscall__Fstab *to, struct fstab *from)
+copy_fstab (struct Mono_Posix_Syscall__Fstab *to, mph_fstab *from)
 {
        char *buf;
+
+       memset (to, 0, sizeof(*to));
+
        buf = _mph_copy_structure_strings (to, mph_fstab_offsets,
                        from, fstab_offsets, sizeof(fstab_offsets)/sizeof(fstab_offsets[0]));
 
@@ -83,7 +110,7 @@ copy_fstab (struct Mono_Posix_Syscall__Fstab *to, struct fstab *from)
        return 0;
 }
 
-#endif /* def HAVE_FSTAB_H */
+#endif /* def HAVE_CHECKLIST_H || def HAVE_FSTAB_H */
 
 #ifdef HAVE_SYS_VFSTAB_H
 
@@ -120,6 +147,9 @@ static int
 copy_fstab (struct Mono_Posix_Syscall__Fstab *to, struct vfstab *from)
 {
        char *buf;
+
+       memset (to, 0, sizeof(*to));
+
        buf = _mph_copy_structure_strings (to, mph_fstab_offsets,
                        from, vfstab_offsets, sizeof(vfstab_offsets)/sizeof(vfstab_offsets[0]));
 
@@ -210,7 +240,7 @@ getfsspec (const char *special_file)
 
 #endif /* def HAVE_SYS_VFSTAB_H */
 
-#if defined (HAVE_FSTAB_H) || defined (HAVE_SYS_VFSTAB_H)
+#if defined (HAVE_FSTAB_H) || defined (HAVE_CHECKPOINT_H) || defined (HAVE_SYS_VFSTAB_H)
 
 void
 Mono_Posix_Syscall_endfsent (void)
@@ -289,7 +319,7 @@ Mono_Posix_Syscall_setfsent (void)
        return setfsent ();
 }
 
-#endif /* def HAVE_FSTAB_H || def HAVE_SYS_VFSTAB_H */
+#endif /* def HAVE_FSTAB_H || def HAVE_CHECKPOINT_H || def HAVE_SYS_VFSTAB_H */
 
 G_END_DECLS