On 2022-09-01 Th 19:39, Tom Lane wrote: > find_my_exec() wants to obtain an absolute, symlink-free path > to the program's own executable, for what seem to me good > reasons. However, chasing down symlinks is left to its > subroutine resolve_symlinks(), which does this: > > * To resolve a symlink properly, we have to chdir into its directory and > * then chdir to where the symlink points; otherwise we may fail to > * resolve relative links correctly (consider cases involving mount > * points, for example). After following the final symlink, we use > * getcwd() to figure out where the heck we're at. > > and then afterwards it has to chdir back to the original cwd. > That last step is a bit of a sore spot, because sometimes > (especially in sudo situations) we may not have the privileges > necessary to do that; I think this is the cause of the complaint > at [1]. Anyway the whole thing seems a bit excessively Rube > Goldbergian. I'm wondering why we couldn't just read the > symlink(s), concatenate them together, and use canonicalize_path() > to clean up any mess. > > This code was mine originally (336969e49), but I sure don't > remember why I wrote it like that. I know we didn't have a > robust version of canonicalize_path() then, and that may have > been the main issue, but that offhand comment about mount > points bothers me. But I can't reconstruct precisely what > I was worried about there. The only contemporaneous discussion > thread I can find is [2], which doesn't go into coding details. > > Thoughts? > > regards, tom lane > > [1] > https://www.postgresql.org/message-id/flat/CAH8yC8kOj0pmHF1RbK2Gb2t4YCcNG-5h0TwZ7yxk3Hzw6C0Otg%40mail.gmail.com > [2] https://www.postgresql.org/message-id/flat/4973.1099605411%40sss.pgh.pa.us > >
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? I don't know how portable they are. I don't see them here :-( <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/crt-alphabetical-function-reference?view=msvc-170> cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com