Re: Can we avoid chdir'ing in resolve_symlinks() ?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Can we avoid chdir'ing in resolve_symlinks() ?
Дата
Msg-id 1457809.1662232534@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Can we avoid chdir'ing in resolve_symlinks() ?  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Can we avoid chdir'ing in resolve_symlinks() ?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
I wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
>> These days there seem to be library functions that do this, realpath(3)
>> and canonicalize_file_name(3). The latter is what seems to be called by
>> readlink(1). Should we be using one of those?

> Oh!  I see realpath() in POSIX, but not canonicalize_file_name().
> It does look like realpath() would be helpful here, although if
> it's not present on Windows that's a problem.

After some surveying of man pages, I conclude that

(1) realpath() exists on all platforms of interest except Windows,
where it looks like we can use _fullpath() instead.

(2) AIX and Solaris 10 only implement the SUSv2 semantics,
where the caller must supply a buffer that it has no good way
to determine a safe size for.  Annoying.

(3) The Solaris 10 man page has this interesting disclaimer:

     The realpath() function might fail to return to the current
     directory if an error occurs.

which implies that on that platform it's basically implemented
in the same way as our current code.  Sigh.

I think we can ignore (3) though.  Solaris 11 seems to have an
up-to-speed implementation of realpath(), and 10 will be EOL
in January 2024 according to Wikipedia.

As for (2), both systems promise to report EINVAL for a null
pointer, which is also what SUSv2 says.  So I think what we
can do is approximately

    ptr = realpath(fname, NULL);
    if (ptr == NULL && errno == EINVAL)
    {
        ptr = pg_malloc(MAXPGPATH);
        ptr = realpath(fname, ptr);
    }

and just take it on faith that MAXPGPATH is enough on those
platforms.

            regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Noah Misch
Дата:
Сообщение: Re: Solaris "sed" versus pre-v13 plpython tests
Следующее
От: Jeff Davis
Дата:
Сообщение: Re: allowing for control over SET ROLE