[RFC PATCH] configure: check for POSIX.1-2008 realpath(3) implementation.

Tomi Ollila tomi.ollila at iki.fi
Sun Jan 26 03:18:12 PST 2014


On Sun, Jan 26 2014, David Bremner <david at tethera.net> wrote:

> Tomi Ollila <tomi.ollila at iki.fi> writes:
>> +#if POSIX_2008_REALPATH
>>      filename = realpath (config->filename, NULL);
>> +#else
>> +    /* compatibility with minor effort, not elegance, is the ruling factor
>> +       in these (two) else branches... */
>> +    char resolved_path[PATH_MAX];
>> +    filename = realpath (config->filename, resolved_path);
>> +#endif


>
> I worry a bit about making the mainline code messier and harder to maintain, in order to
> accomodate an unknown number of targets without POSIX2008 realpath. Do
> we know how widespread this problem is? Is it just NetBSD?
>
> I looked at borrowing realpath from gnulib; it looks like it would be a
> bit of work as the least complicated version includes 3 other include
> files. But then the mainline code could be blisfully ignorant of the
> whole dispute.

We could also create

char * realpath2008 (const char * path, char * resolved_path)
{
        if (resolved_path == NULL) {
		resolved_path = malloc (MAX_PATH);
                if (resolved_path == NULL)
			return NULL;
        }
        return realpath (path, resolved_path);
}
        
And, in the case where NULL argument is accepted, 

#define realpath2008(path, resolved_path) realpath(path, resolved_path) 

(or an inline function to do the same)

In this case one is not totally ignorant to the whole dispute -- but
on the other hand, developer should be savvy about the potential 
issues using realpath() function, and this might just ring the bell...

> d

Tomi


More information about the notmuch mailing list