diff options
author | ocean <ocean@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-11-10 22:43:38 +0000 |
---|---|---|
committer | ocean <ocean@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-11-10 22:43:38 +0000 |
commit | 0535fc9cac00ca44938713ebc0a849272baf9b8b (patch) | |
tree | cca609ba526e7821791c40a47cb8e955f4724ebb | |
parent | dd7a195a218db5895a73a74c14c036ffbe853676 (diff) | |
download | ruby-0535fc9cac00ca44938713ebc0a849272baf9b8b.tar.gz |
* configure.in: undef HAVE_LINK on BeOS. (link(2) always returns
EINVAL, and this causes error in test/fileutils.)
* file.c: overwride chown(2) and fchown(2) on BeOS. (these functions
should not change user/group id if -1 is passed as corresponding
argument, and this causes error in test/fileutils too)
[ruby-dev:27672]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | file.c | 27 |
3 files changed, 38 insertions, 1 deletions
@@ -1,3 +1,13 @@ +Fri Nov 11 07:39:49 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp> + + * configure.in: undef HAVE_LINK on BeOS. (link(2) always returns + EINVAL, and this causes error in test/fileutils.) + + * file.c: overwride chown(2) and fchown(2) on BeOS. (these functions + should not change user/group id if -1 is passed as corresponding + argument, and this causes error in test/fileutils too) + [ruby-dev:27672] + Thu Nov 10 21:05:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org> * lib/shellwords.rb: fix for blank but not empty string. diff --git a/configure.in b/configure.in index 7209f0a592..65fd015b3e 100644 --- a/configure.in +++ b/configure.in @@ -346,7 +346,7 @@ hpux*) LIBS="-lm $LIBS" human*) ac_cv_func_getpgrp_void=yes ac_cv_func_setitimer=no ;; -beos*) ;; +beos*) ac_cv_func_link=no;; cygwin*) rb_cv_have_daylight=no ac_cv_var_tzname=no ac_cv_func__setjmp=no @@ -64,6 +64,33 @@ VALUE rb_time_new(time_t, time_t); #define lstat stat #endif +#ifdef __BEOS__ /* should not change ID if -1 */ +static int +be_chown(const char *path, uid_t owner, gid_t group) +{ + if (owner == -1 || group == -1) { + struct stat st; + if (stat(path, &st) < 0) return -1; + if (owner == -1) owner = st.st_uid; + if (group == -1) group = st.st_gid; + } + return chown(path, owner, group); +} +#define chown be_chown +static int +be_fchown(int fd, uid_t owner, gid_t group) +{ + if (owner == -1 || group == -1) { + struct stat st; + if (fstat(fd, &st) < 0) return -1; + if (owner == -1) owner = st.st_uid; + if (group == -1) group = st.st_gid; + } + return fchown(fd, owner, group); +} +#define fchown be_fchown +#endif /* __BEOS__ */ + VALUE rb_cFile; VALUE rb_mFileTest; static VALUE rb_cStat; |