On Thu, Sep 04, 2008 at 11:56:44AM +0200, Jim Meyering wrote:
"Richard W.M. Jones" <rjones(a)redhat.com> wrote:
> On Thu, Sep 04, 2008 at 08:24:14AM +0200, Jim Meyering wrote:
>> Instead of adding the #if/else blocks above,
>> how about adding these in some header file?
>>
>> #ifndef HAVE_GETGID
>> static inline gid_t getgid (void) { return 0; }
>> #endif
>>
>> #ifndef HAVE_GETUID
>> static inline uid_t getuid (void) { return 0; }
>> #endif
>
> Hmmm ...
>
> It's a bit unexpected to have fundamental syscalls like getuid()
> implemented as macros which can return 0 ...
Why?
If those functions don't exist, this supplies replacements
(functions) that have the same semantics as the code in
Dan's patch: i.e. pretend UID==0 and GID==0.
but with far fewer cpp directives.
Doesn't it do the right thing?
It's just a bit worrying that people might use getuid/getgid expecting
them to return useful values under Windows, whereas in fact they would
be 'silently' returning 0.
In earlier versions of libvirt we made all sorts of assumptions about
things like read-only connections based on UIDs. When I started the
first port to MinGW I found it was useful to flag those and eventually
completely remove them:
http://www.redhat.com/archives/libvir-list/2007-December/msg00168.html
http://www.redhat.com/archives/libvir-list/2008-April/msg00194.html
I'm not convinced that we should always be removing #ifdefs at all
costs, if in fact those serve to remind us of non-portable code or
code which is making unwarranted assumptions.
Rich.
--
Richard Jones, Emerging Technologies, Red Hat
http://et.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/