On Thu, Jul 28, 2005 at 09:12:21AM -0700, Kean Johnston wrote:
> to:
> extern int stat (const char *__p, stat_t *__s);
> extern __inline__ int
> stat(const char *__p, stat_t *__s)
> {
> return _xstat(_STAT_VER, __p, __s);
> }
...
> From reading teh docs it seems like 'extern __inline__' was
> the way to go for this type of header file trickery. However,
> it caused a problem bootstrapping the compiler, becuase the
> first stage doesn't have -O, so any calls to stat() actually
> go to the library routine called stat(), which is an old,
> deprecated stat that can't deal with, say, 32-bit inodes or
> uid_t's etc, and various programs like fixincludes then
> fail to stat files.
...
> However, I *think* I like the semantics of 'extern inline'
> better: use the inline version for the most part but if,
> for example, you take the address of the function, use the
> actual symbol stat(). But I see that most other fixincs
> use static inline.
Huh? This paragraph conflicts with the previous one I quoted. You
don't want extern inline, because you don't want the symbol stat() to
be called - that's your whole problem.
--
Daniel Jacobowitz
CodeSourcery, LLC