[runtime] Fix DISABLE_REFLECTION_EMIT build.
[mono.git] / support / fstab.c
index d36fc20298db6e7742f90d57fe79faba3e210553..010342704a1cd7ce16cc7df72f63124967bc6571 100644 (file)
 #include <stdlib.h>
 #include <stddef.h>
 
+#include "map.h"
 #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 */
 
 #include <sys/vfstab.h>
 #endif /* def HAVE_SYS_VFSTAB_H */
 
-#ifdef HAVE_CHECKLIST_H
-#include <checklist.h>
-#endif /* def HAVE_CHECKLIST_H */
-
 G_BEGIN_DECLS
 
-struct Mono_Posix_Syscall__Fstab {
-       char  *fs_spec;     /* block device name */
-       char  *fs_file;     /* mount point */
-       char  *fs_vfstype;      /* filesystem type */
-       char  *fs_mntops;   /* mount options */
-       char  *fs_type;     /* rw/rq/ro/sw/xx option */
-       int    fs_freq;     /* dump frequency, in days */
-       int    fs_passno;   /* pass number on parallel dump */
-
-       char  *_fs_buf_;
-};
-
-#ifdef HAVE_FSTAB_H
+#ifdef HAVE_CHECKLIST_H
 
-typedef struct fstab mph_fstab;
+typedef struct checklist mph_fstab;
 
-static const size_t
+static const mph_string_offset_t
 fstab_offsets[] = {
-       offsetof (struct fstab, fs_spec),
-       offsetof (struct fstab, fs_file),
-       offsetof (struct fstab, fs_vfstype),
-       offsetof (struct fstab, fs_mntops),
-       offsetof (struct fstab, fs_type)
+       MPH_STRING_OFFSET (struct checklist, fs_spec, MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct checklist, fs_dir,  MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct checklist, fs_type, MPH_STRING_OFFSET_PTR)
 };
 
-static const size_t
+static const mph_string_offset_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_vfstype),
-       offsetof (struct Mono_Posix_Syscall__Fstab, fs_mntops),
-       offsetof (struct Mono_Posix_Syscall__Fstab, fs_type)
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_spec, MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_file, MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_type, MPH_STRING_OFFSET_PTR)
 };
 
-#endif /* def HAVE_FSTAB_H */
+#elif defined (HAVE_FSTAB_H)
 
-#ifdef HAVE_CHECKLIST_H
-
-typedef struct checklist mph_fstab;
+typedef struct fstab mph_fstab;
 
-static const size_t
+static const mph_string_offset_t
 fstab_offsets[] = {
-       offsetof (struct checklist, fs_spec),
-       offsetof (struct checklist, fs_dir),
-       offsetof (struct checklist, fs_type)
+       MPH_STRING_OFFSET (struct fstab, fs_spec,     MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct fstab, fs_file,     MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct fstab, fs_vfstype,  MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct fstab, fs_mntops,   MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct fstab, fs_type,     MPH_STRING_OFFSET_PTR)
 };
 
-static const size_t
+static const mph_string_offset_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)
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_spec,     MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_file,     MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_vfstype,  MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_mntops,   MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_type,     MPH_STRING_OFFSET_PTR)
 };
 
-#endif /* def HAVE_CHECKLIST_H */
+#endif /* def HAVE_FSTAB_H */
 
 #if defined (HAVE_CHECKLIST_H) || defined (HAVE_FSTAB_H)
 
@@ -125,20 +110,20 @@ copy_fstab (struct Mono_Posix_Syscall__Fstab *to, mph_fstab *from)
 
 typedef struct vfstab mph_fstab;
 
-static const size_t
+static const mph_string_offset_t
 vfstab_offsets[] = {
-       offsetof (struct vfstab, vfs_special),
-       offsetof (struct vfstab, vfs_mountp),
-       offsetof (struct vfstab, vfs_fstype),
-       offsetof (struct vfstab, vfs_mntopts)
+       MPH_STRING_OFFSET (struct vfstab, vfs_special,  MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct vfstab, vfs_mountp,   MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct vfstab, vfs_fstype,   MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct vfstab, vfs_mntopts,  MPH_STRING_OFFSET_PTR)
 };
 
-static const size_t
+static const mph_string_offset_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_vfstype),
-       offsetof (struct Mono_Posix_Syscall__Fstab, fs_mntops)
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_spec,     MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_file,     MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_vfstype,  MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Fstab, fs_mntops,   MPH_STRING_OFFSET_PTR)
 };
 
 /*
@@ -178,6 +163,9 @@ etc_fstab;
 static int
 setfsent (void)
 {
+       /* protect from bad users calling setfsent(), setfsent(), ... endfsent() */
+       if (etc_fstab != NULL)
+               fclose (etc_fstab);
        etc_fstab = fopen ("/etc/vfstab", "r");
        if (etc_fstab != NULL)
                return 1;
@@ -244,12 +232,13 @@ 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
+int
 Mono_Posix_Syscall_endfsent (void)
 {
        endfsent ();
+       return 0;
 }
 
 gint32
@@ -323,7 +312,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