* Authors:
* Jonathan Pryor (jonpryor@vt.edu)
*
- * Copyright (C) 2004 Jonathan Pryor
+ * Copyright (C) 2004-2005 Jonathan Pryor
*/
#include <pwd.h>
#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),
+#if HAVE_STRUCT_PASSWD_PW_GECOS
+ MPH_STRING_OFFSET (struct passwd, pw_gecos, MPH_STRING_OFFSET_PTR),
+#endif /* def HAVE_STRUCT_PASSWD_PW_GECOS */
+ 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),
+#if HAVE_STRUCT_PASSWD_PW_GECOS
+ MPH_STRING_OFFSET (struct Mono_Posix_Syscall__Passwd, pw_gecos, MPH_STRING_OFFSET_PTR),
+#endif /* def HAVE_STRUCT_PASSWD_PW_GECOS */
+ 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)
};
/*
}
#endif /* ndef HAVE_GETPWUID_R */
+#if HAVE_GETPWENT
gint32
Mono_Posix_Syscall_getpwent (struct Mono_Posix_Syscall__Passwd *pwbuf)
{
}
return 0;
}
+#endif /* def HAVE_GETPWENT */
#ifdef HAVE_FGETPWENT
gint32
}
#endif /* ndef HAVE_FGETPWENT */
+#if HAVE_SETPWENT
+int
+Mono_Posix_Syscall_setpwent (void)
+{
+ errno = 0;
+ do {
+ setpwent ();
+ } while (errno == EINTR);
+ mph_return_if_val_in_list5(errno, EIO, EMFILE, ENFILE, ENOMEM, ERANGE);
+ return 0;
+}
+#endif /* def HAVE_SETPWENT */
+
+#if HAVE_ENDPWENT
+int
+Mono_Posix_Syscall_endpwent (void)
+{
+ errno = 0;
+ endpwent ();
+ if (errno == EIO)
+ return -1;
+ return 0;
+}
+#endif /* def HAVE_ENDPWENT */
+
G_END_DECLS
/*