Bugs item #3317, was opened at 2006-01-24 15:33
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=3317&group_id=426

Category: Core
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Marcus Rueckert (darix)
Assigned to: Nobody (None)
Summary: trouble due ruby redefining posix function eaccess

Initial Comment:
ruby redefines eaccess in intern.h
[[[
$ grep eaccess intern.h
int eaccess _((const char*, int));
]]]

that wasnt a problem as long the ruby definition matched  the glibc definition.
for the upcoming glibc 2.4 the definition of eaccess() was changed a bit.

the relevant snippet from the unistd.h [1]
[[[
/* Test for access to NAME using the effective UID and GID
   (as normal file operations use).  */
extern int euidaccess (__const char *__name, int __type)
     __THROW __nonnull ((1));

/* An alias for `euidaccess', used by some other systems.  */
extern int eaccess (__const char *__name, int __type)
     __THROW __nonnull ((1));
]]]


[1]
http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/posix/unistd.h?rev=1.143&content-type=text/x-cvsweb-markup&cvsroot=glibc

if a program now includes unistd and ruby.h you get the following error:
/usr/include/unistd.h:266: error: declaration of 'int eaccess(const char*, int) throw ()' throws different exceptions
/usr/lib/ruby/1.8/i586-linux/intern.h:223: error: from previous declaration 'int eaccess(const char*, int)'

from the code it seems the ruby version is not as strict as the glibc version.
would it be enough to rename the ruby internal function to rb_eaccess and refactor all calls from eaccess to rb_eaccess?


----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=3317&group_id=426