Migrating from monodoc/class to mcs/docs...
[mono.git] / support / pwd.c
index 38859e0d7c61bb3522adf62da87ec0bba2fe3b0c..13bccef9b559a9392c6787f8dc47c19ab485296b 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "map.h"
 #include "mph.h"
 
 G_BEGIN_DECLS
 
-struct Mono_Posix_Syscall__Passwd {
-       /* string */ char      *pw_name;
-       /* string */ char      *pw_passwd;
-       /* uid_t  */ mph_uid_t  pw_uid;
-       /* gid_t  */ mph_gid_t  pw_gid;
-       /* string */ char      *pw_gecos;
-       /* string */ char      *pw_dir;
-       /* string */ char      *pw_shell;
-       /* string */ char      *_pw_buf_;
-};
-
-static const size_t
+static const mph_string_offset_t
 passwd_offsets[] = {
-       offsetof (struct passwd, pw_name),
-       offsetof (struct passwd, pw_passwd),
-       offsetof (struct passwd, pw_gecos),
-       offsetof (struct passwd, pw_dir),
-       offsetof (struct passwd, pw_shell)
+       MPH_STRING_OFFSET (struct passwd, pw_name,    MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct passwd, pw_passwd,  MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct passwd, pw_gecos,   MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct passwd, pw_dir,     MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct passwd, pw_shell,   MPH_STRING_OFFSET_PTR)
 };
 
-static const size_t
+static const mph_string_offset_t
 mph_passwd_offsets[] = {
-       offsetof (struct Mono_Posix_Syscall__Passwd, pw_name),
-       offsetof (struct Mono_Posix_Syscall__Passwd, pw_passwd),
-       offsetof (struct Mono_Posix_Syscall__Passwd, pw_gecos),
-       offsetof (struct Mono_Posix_Syscall__Passwd, pw_dir),
-       offsetof (struct Mono_Posix_Syscall__Passwd, pw_shell)
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Passwd, pw_name,    MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Passwd, pw_passwd,  MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Passwd, pw_gecos,   MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Passwd, pw_dir,     MPH_STRING_OFFSET_PTR),
+       MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Passwd, pw_shell,   MPH_STRING_OFFSET_PTR)
 };
 
 /*
@@ -247,8 +237,11 @@ int
 Mono_Posix_Syscall_setpwent (void)
 {
        errno = 0;
-       setpwent ();
-       return errno == 0 ? 0 : -1;
+       do {
+               setpwent ();
+       } while (errno == EINTR);
+       mph_return_if_val_in_list5(errno, EIO, EMFILE, ENFILE, ENOMEM, ERANGE);
+       return 0;
 }
 
 int
@@ -256,7 +249,9 @@ Mono_Posix_Syscall_endpwent (void)
 {
        errno = 0;
        endpwent ();
-       return errno == 0 ? 0 : -1;
+       if (errno == EIO)
+               return -1;
+       return 0;
 }
 
 G_END_DECLS