14 #include <sys/types.h> 29 #ifdef HAVE_SYS_UTSNAME_H 30 #include <sys/utsname.h> 33 #ifdef HAVE_SCHED_GETAFFINITY 44 #ifndef CSIDL_COMMON_APPDATA 45 #define CSIDL_COMMON_APPDATA 35 79 if (!login) login =
getenv(
"USER");
96 #if defined(HAVE_GETPWENT) || defined(HAVE_GETGRENT) 98 safe_setup_str(
const char *str)
100 if (str == 0) str =
"";
105 safe_setup_locale_str(
const char *str)
107 if (str == 0) str =
"";
112 safe_setup_filesystem_str(
const char *str)
114 if (str == 0) str =
"";
121 setup_passwd(
struct passwd *pwd)
125 safe_setup_locale_str(pwd->pw_name),
126 #ifdef HAVE_STRUCT_PASSWD_PW_PASSWD
127 safe_setup_str(pwd->pw_passwd),
131 #ifdef HAVE_STRUCT_PASSWD_PW_GECOS
132 safe_setup_locale_str(pwd->pw_gecos),
134 safe_setup_filesystem_str(pwd->pw_dir),
135 safe_setup_filesystem_str(pwd->pw_shell),
136 #ifdef HAVE_STRUCT_PASSWD_PW_CHANGE
139 #ifdef HAVE_STRUCT_PASSWD_PW_QUOTA
142 #ifdef HAVE_STRUCT_PASSWD_PW_AGE
143 PW_AGE2VAL(pwd->pw_age),
145 #ifdef HAVE_STRUCT_PASSWD_PW_CLASS
146 safe_setup_locale_str(pwd->pw_class),
148 #ifdef HAVE_STRUCT_PASSWD_PW_COMMENT
149 safe_setup_locale_str(pwd->pw_comment),
151 #ifdef HAVE_STRUCT_PASSWD_PW_EXPIRE
179 #if defined(HAVE_GETPWENT) 192 return setup_passwd(pwd);
222 return setup_passwd(pwd);
229 static int passwd_blocking = 0;
234 passwd_blocking = (int)
Qfalse;
244 while ((pw = getpwent()) != 0) {
253 if (passwd_blocking) {
256 passwd_blocking = (int)
Qtrue;
257 rb_ensure(passwd_iterate, 0, passwd_ensure, 0);
290 else if ((pw = getpwent()) != 0) {
291 return setup_passwd(pw);
372 if ((pw = getpwent()) != 0) {
373 return setup_passwd(pw);
381 setup_group(
struct group *grp)
393 safe_setup_locale_str(grp->gr_name),
394 #ifdef HAVE_STRUCT_GROUP_GR_PASSWD
395 safe_setup_str(grp->gr_passwd),
434 return setup_group(grp);
465 return setup_group(grp);
472 static int group_blocking = 0;
477 group_blocking = (int)
Qfalse;
488 while ((pw = getgrent()) != 0) {
497 if (group_blocking) {
500 group_blocking = (int)
Qtrue;
501 rb_ensure(group_iterate, 0, group_ensure, 0);
530 else if ((grp = getgrent()) != 0) {
531 return setup_group(grp);
561 etc_each_group(
VALUE obj)
609 if ((gr = getgrent()) != 0) {
610 return setup_group(gr);
616 #define numberof(array) (sizeof(array) / sizeof(*(array))) 649 WCHAR path[_MAX_PATH];
651 if (!len)
return Qnil;
654 const char default_tmp[] =
"/tmp";
655 const char *tmpstr = default_tmp;
656 size_t tmplen =
strlen(default_tmp);
657 # if defined _CS_DARWIN_USER_TEMP_DIR 659 #define MAXPATHLEN 1024 663 len = confstr(_CS_DARWIN_USER_TEMP_DIR, path,
sizeof(path));
667 if (len >
sizeof(path)) tmpstr = 0;
671 # if defined _CS_DARWIN_USER_TEMP_DIR 673 confstr(_CS_DARWIN_USER_TEMP_DIR,
RSTRING_PTR(tmpdir), len);
707 const char *sysname, *mach;
713 v.dwOSVersionInfoSize =
sizeof(v);
714 if (!GetVersionExW(&v))
718 switch (v.dwPlatformId) {
719 case VER_PLATFORM_WIN32s:
722 case VER_PLATFORM_WIN32_NT:
723 sysname =
"Windows_NT";
725 case VER_PLATFORM_WIN32_WINDOWS:
731 release =
rb_sprintf(
"%lu.%lu.%lu", v.dwMajorVersion, v.dwMinorVersion, v.dwBuildNumber);
737 # if defined _MSC_VER && _MSC_VER < 1300 738 # define GET_COMPUTER_NAME(ptr, plen) GetComputerNameW(ptr, plen) 740 # define GET_COMPUTER_NAME(ptr, plen) GetComputerNameExW(ComputerNameDnsFullyQualified, ptr, plen) 742 GET_COMPUTER_NAME(
NULL, &len);
744 if (GET_COMPUTER_NAME(buf, &len)) {
751 # ifndef PROCESSOR_ARCHITECTURE_AMD64 752 # define PROCESSOR_ARCHITECTURE_AMD64 9 754 # ifndef PROCESSOR_ARCHITECTURE_IA64 755 # define PROCESSOR_ARCHITECTURE_IA64 6 757 # ifndef PROCESSOR_ARCHITECTURE_INTEL 758 # define PROCESSOR_ARCHITECTURE_INTEL 0 761 switch (s.wProcessorArchitecture) {
762 case PROCESSOR_ARCHITECTURE_AMD64:
765 case PROCESSOR_ARCHITECTURE_ARM:
768 case PROCESSOR_ARCHITECTURE_IA64:
771 case PROCESSOR_ARCHITECTURE_INTEL:
800 #define etc_uname rb_f_notimplement 834 #define etc_sysconf rb_f_notimplement 857 char localbuf[128], *
buf = localbuf;
858 size_t bufsize =
sizeof(localbuf), ret;
864 ret = confstr(name, buf, bufsize);
869 ret = confstr(name, buf, bufsize);
872 rb_bug(
"required buffer size for confstr() changed dynamically.");
881 #define etc_confstr rb_f_notimplement 884 #ifdef HAVE_FPATHCONF 911 ret = fpathconf(fptr->
fd, name);
920 #define io_pathconf rb_f_notimplement 923 #if (defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)) || defined(_WIN32) 925 #if defined(HAVE_SCHED_GETAFFINITY) && defined(CPU_ALLOC) 927 etc_nprocessors_affin(
void)
950 for (n=64; n <= 16384; n *= 2) {
951 size = CPU_ALLOC_SIZE(n);
958 CPU_ZERO_S(size, cpuset);
961 ret = sched_getaffinity(0, size, cpuset);
964 ret = CPU_COUNT_S(size, cpuset);
1008 #if !defined(_WIN32) 1010 #if defined(HAVE_SCHED_GETAFFINITY) && defined(CPU_ALLOC) 1013 ncpus = etc_nprocessors_affin();
1021 ret = sysconf(_SC_NPROCESSORS_ONLN);
1028 ret = (long)si.dwNumberOfProcessors;
1033 #define etc_nprocessors rb_f_notimplement 1095 #ifdef HAVE_STRUCT_PASSWD_PW_PASSWD
1100 #ifdef HAVE_STRUCT_PASSWD_PW_GECOS
1105 #ifdef HAVE_STRUCT_PASSWD_PW_CHANGE
1108 #ifdef HAVE_STRUCT_PASSWD_PW_QUOTA
1111 #ifdef HAVE_STRUCT_PASSWD_PW_AGE
1114 #ifdef HAVE_STRUCT_PASSWD_PW_CLASS
1117 #ifdef HAVE_STRUCT_PASSWD_PW_COMMENT
1120 #ifdef HAVE_STRUCT_PASSWD_PW_EXPIRE
1170 #ifdef HAVE_GETGRENT 1172 #ifdef HAVE_STRUCT_GROUP_GR_PASSWD
1175 "gid",
"mem", NULL);
void rb_bug(const char *fmt,...)
static VALUE etc_getpwnam(VALUE obj, VALUE nam)
static VALUE etc_endgrent(VALUE obj)
size_t strlen(const char *)
static VALUE etc_group(VALUE obj)
void rb_define_singleton_method(VALUE obj, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a singleton method for obj.
static VALUE etc_setpwent(VALUE obj)
static VALUE etc_getpwent(VALUE obj)
static VALUE etc_setgrent(VALUE obj)
VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *)
static void init_constants(VALUE mod)
VALUE rb_struct_new(VALUE,...)
VALUE rb_ary_push(VALUE ary, VALUE item)
static VALUE etc_getgrnam(VALUE obj, VALUE nam)
void rb_raise(VALUE exc, const char *fmt,...)
static VALUE etc_systmpdir(void)
#define CSIDL_COMMON_APPDATA
static VALUE etc_getpwuid(int argc, VALUE *argv, VALUE obj)
rb_encoding * rb_utf8_encoding(void)
#define GetOpenFile(obj, fp)
VALUE rb_struct_define_under(VALUE, const char *,...)
static VALUE etc_passwd(VALUE obj)
VALUE rb_w32_conv_from_wchar(const WCHAR *wstr, rb_encoding *enc)
int rb_block_given_p(void)
VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val)
static VALUE etc_getgrgid(int argc, VALUE *argv, VALUE obj)
void rb_define_const(VALUE, const char *, VALUE)
#define ALLOCV_N(type, v, n)
UINT rb_w32_system_tmpdir(WCHAR *path, UINT len)
VALUE rb_locale_str_new_cstr(const char *)
void rb_define_module_function(VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a module function for module.
VALUE rb_sprintf(const char *format,...)
static VALUE etc_getlogin(VALUE obj)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
unsigned char buf[MIME_BUF_SIZE]
rb_encoding * rb_locale_encoding(void)
void rb_extend_object(VALUE obj, VALUE module)
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
VALUE rb_str_new_cstr(const char *)
#define rb_tainted_str_new2
void rb_sys_fail(const char *mesg)
register unsigned int len
static VALUE etc_each_passwd(VALUE obj)
RUBY_EXTERN VALUE rb_cStruct
VALUE rb_w32_special_folder(int type)
static VALUE etc_endpwent(VALUE obj)
rb_encoding * rb_filesystem_encoding(void)
#define RETURN_ENUMERATOR(obj, argc, argv)
#define SafeStringValue(v)
VALUE rb_filesystem_str_new_cstr(const char *)
VALUE rb_define_module(const char *name)
static VALUE etc_sysconfdir(VALUE obj)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
static VALUE etc_getgrent(VALUE obj)
VALUE rb_filesystem_str_new(const char *, long)
VALUE rb_str_new(const char *, long)