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
55#define RUBY_ETC_VERSION "1.1.0"
81 if (!login) login =
getenv(
"USER");
98#if defined(HAVE_GETPWENT) || defined(HAVE_GETGRENT)
100safe_setup_str(
const char *
str)
107safe_setup_locale_str(
const char *
str)
114safe_setup_filesystem_str(
const char *
str)
123setup_passwd(
struct passwd *pwd)
127 safe_setup_locale_str(pwd->pw_name),
128#ifdef HAVE_STRUCT_PASSWD_PW_PASSWD
129 safe_setup_str(pwd->pw_passwd),
133#ifdef HAVE_STRUCT_PASSWD_PW_GECOS
134 safe_setup_locale_str(pwd->pw_gecos),
136 safe_setup_filesystem_str(pwd->pw_dir),
137 safe_setup_filesystem_str(pwd->pw_shell),
138#ifdef HAVE_STRUCT_PASSWD_PW_CHANGE
141#ifdef HAVE_STRUCT_PASSWD_PW_QUOTA
144#ifdef HAVE_STRUCT_PASSWD_PW_AGE
145 PW_AGE2VAL(pwd->pw_age),
147#ifdef HAVE_STRUCT_PASSWD_PW_CLASS
148 safe_setup_locale_str(pwd->pw_class),
150#ifdef HAVE_STRUCT_PASSWD_PW_COMMENT
151 safe_setup_locale_str(pwd->pw_comment),
153#ifdef HAVE_STRUCT_PASSWD_PW_EXPIRE
181#if defined(HAVE_GETPWENT)
194 return setup_passwd(pwd);
224 return setup_passwd(pwd);
231static int passwd_blocking = 0;
246 while ((pw = getpwent()) != 0) {
255 if (passwd_blocking) {
259 rb_ensure(passwd_iterate, 0, passwd_ensure, 0);
292 else if ((pw = getpwent()) != 0) {
293 return setup_passwd(pw);
374 if ((pw = getpwent()) != 0) {
375 return setup_passwd(pw);
383setup_group(
struct group *grp)
395 safe_setup_locale_str(grp->gr_name),
396#ifdef HAVE_STRUCT_GROUP_GR_PASSWD
397 safe_setup_str(grp->gr_passwd),
436 return setup_group(grp);
467 return setup_group(grp);
474static int group_blocking = 0;
490 while ((pw = getgrent()) != 0) {
499 if (group_blocking) {
503 rb_ensure(group_iterate, 0, group_ensure, 0);
532 else if ((grp = getgrent()) != 0) {
533 return setup_group(grp);
611 if ((gr = getgrent()) != 0) {
612 return setup_group(gr);
618#define numberof(array) (sizeof(array) / sizeof(*(array)))
652 WCHAR
path[_MAX_PATH];
657 const char default_tmp[] =
"/tmp";
658 const char *tmpstr = default_tmp;
659 size_t tmplen =
strlen(default_tmp);
660# if defined _CS_DARWIN_USER_TEMP_DIR
662 #define MAXPATHLEN 1024
670 if (
len >
sizeof(
path)) tmpstr = 0;
674# if defined _CS_DARWIN_USER_TEMP_DIR
680#ifndef RB_PASS_KEYWORDS
713 const char *sysname, *mach;
714 VALUE result, release, version;
719 v.dwOSVersionInfoSize =
sizeof(
v);
720 if (!GetVersionExW(&
v))
724 switch (
v.dwPlatformId) {
725 case VER_PLATFORM_WIN32s:
728 case VER_PLATFORM_WIN32_NT:
729 sysname =
"Windows_NT";
731 case VER_PLATFORM_WIN32_WINDOWS:
737 release =
rb_sprintf(
"%lu.%lu.%lu",
v.dwMajorVersion,
v.dwMinorVersion,
v.dwBuildNumber);
743# if defined _MSC_VER && _MSC_VER < 1300
744# define GET_COMPUTER_NAME(ptr, plen) GetComputerNameW(ptr, plen)
746# define GET_COMPUTER_NAME(ptr, plen) GetComputerNameExW(ComputerNameDnsFullyQualified, ptr, plen)
750 if (GET_COMPUTER_NAME(
buf, &
len)) {
757# ifndef PROCESSOR_ARCHITECTURE_AMD64
758# define PROCESSOR_ARCHITECTURE_AMD64 9
760# ifndef PROCESSOR_ARCHITECTURE_INTEL
761# define PROCESSOR_ARCHITECTURE_INTEL 0
764 switch (s.wProcessorArchitecture) {
765 case PROCESSOR_ARCHITECTURE_AMD64:
768 case PROCESSOR_ARCHITECTURE_ARM:
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;
872 rb_bug(
"required buffer size for confstr() changed dynamically.");
881#define etc_confstr rb_f_notimplement
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)
927etc_nprocessors_affin(
void)
950 for (
n=64;
n <= 16384;
n *= 2) {
1010#if defined(HAVE_SCHED_GETAFFINITY) && defined(CPU_ALLOC)
1013 ncpus = etc_nprocessors_affin();
1028 ret = (
long)si.dwNumberOfProcessors;
1033#define etc_nprocessors rb_f_notimplement
1069 init_constants(mEtc);
1096#ifdef HAVE_STRUCT_PASSWD_PW_PASSWD
1101#ifdef HAVE_STRUCT_PASSWD_PW_GECOS
1106#ifdef HAVE_STRUCT_PASSWD_PW_CHANGE
1109#ifdef HAVE_STRUCT_PASSWD_PW_QUOTA
1112#ifdef HAVE_STRUCT_PASSWD_PW_AGE
1115#ifdef HAVE_STRUCT_PASSWD_PW_CLASS
1118#ifdef HAVE_STRUCT_PASSWD_PW_COMMENT
1121#ifdef HAVE_STRUCT_PASSWD_PW_EXPIRE
1173#ifdef HAVE_STRUCT_GROUP_GR_PASSWD
1176 "gid",
"mem",
NULL);
rb_encoding * rb_utf8_encoding(void)
rb_encoding * rb_filesystem_encoding(void)
rb_encoding * rb_locale_encoding(void)
VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *)
char str[HTML_ESCAPE_MAX_LEN+1]
void rb_extend_object(VALUE, VALUE)
Extend the object with the module.
VALUE rb_define_module(const char *)
int rb_block_given_p(void)
Determines if the current method is given a block.
void rb_raise(VALUE exc, const char *fmt,...)
void rb_bug(const char *fmt,...)
VALUE rb_ensure(VALUE(*)(VALUE), VALUE, VALUE(*)(VALUE), VALUE)
An equivalent to ensure clause.
void rb_sys_fail(const char *mesg)
#define GetOpenFile(obj, fp)
VALUE type(ANYARGS)
ANYARGS-ed function type.
unsigned char buf[MIME_BUF_SIZE]
VALUE rb_w32_special_folder(int type)
#define CSIDL_COMMON_APPDATA
VALUE rb_w32_conv_from_wchar(const WCHAR *wstr, rb_encoding *enc)
UINT rb_w32_system_tmpdir(WCHAR *path, UINT len)