X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Fpwd.c;h=13bccef9b559a9392c6787f8dc47c19ab485296b;hb=4269239ca0b1709487772489dbc61ea454e345ab;hp=38859e0d7c61bb3522adf62da87ec0bba2fe3b0c;hpb=00e065484e866f3a0349c882f804c4a79a13ee5c;p=mono.git diff --git a/support/pwd.c b/support/pwd.c index 38859e0d7c6..13bccef9b55 100644 --- a/support/pwd.c +++ b/support/pwd.c @@ -13,37 +13,27 @@ #include #include +#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