summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--ext/etc/etc.c15
-rw-r--r--ext/etc/extconf.rb4
3 files changed, 11 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 708d1c9ad1..7860eb2621 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Jan 12 11:13:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (etc_getpwuid, etc_getgrgid): fix to correctly
+ convert uid/gid from VALUE. (backport of r11521)
+
Wed Jan 10 18:57:57 2007 Minero Aoki <aamine@loveruby.net>
* ext/strscan/strscan.c (strscan_do_scan): should set kcode option
diff --git a/ext/etc/etc.c b/ext/etc/etc.c
index c9ed3d5293..447d833bc7 100644
--- a/ext/etc/etc.c
+++ b/ext/etc/etc.c
@@ -131,16 +131,7 @@ etc_getpwuid(argc, argv, obj)
rb_secure(4);
if (rb_scan_args(argc, argv, "01", &id) == 1) {
-#if HAVE_LONG_LONG && HAVE_TYPE_UID_T
- if (sizeof(uid_t) > sizeof(int)) {
- uid = NUM2ULL(id);
- }
- else {
- uid = NUM2UINT(id);
- }
-#else
- uid = NUM2UINT(id);
-#endif
+ uid = PW_VAL2UID(id);
}
else {
uid = getuid();
@@ -342,11 +333,11 @@ etc_getgrgid(obj, id)
VALUE obj, id;
{
#ifdef HAVE_GETGRENT
- int gid;
+ gid_t gid;
struct group *grp;
rb_secure(4);
- gid = NUM2INT(id);
+ gid = getgid();
grp = getgrgid(gid);
if (grp == 0) rb_raise(rb_eArgError, "can't find group for %d", gid);
return setup_group(grp);
diff --git a/ext/etc/extconf.rb b/ext/etc/extconf.rb
index 2496d36aa1..dbd0672545 100644
--- a/ext/etc/extconf.rb
+++ b/ext/etc/extconf.rb
@@ -35,7 +35,9 @@ if a or b or c
f = "U#{f}"
end
end
- $defs.push("-DPW_#{t.chomp('_t').upcase}2VAL=#{f}")
+ t = t.chomp('_t').upcase
+ $defs.push("-DPW_#{t}2VAL=#{f}")
+ $defs.push("-DPW_VAL2#{t}=#{f.sub(/([A-Z]+)2(NUM)/, '\22\1')}")
end
create_makefile("etc")
end