Hi,

On 2022-08-03 14:25:01 +1200, Thomas Munro wrote:
> It'd be good to find a new home for pg_get_user_name() and
> pg_get_user_home_dir(), which really shouldn't be left in the now
> bogusly named src/port/thread.c.  Any suggestions?

Leaving the name aside, the win32 handling of these functions is
embarassing. Both are inside an #ifndef WIN32.

The only caller (in fe-auth.c) of pg_get_user_name() has:
#ifdef WIN32
        if (GetUserName(username, &namesize))
                name = username;
        else if (errorMessage)
                appendPQExpBuffer(errorMessage,
                                                  libpq_gettext("user name 
lookup failure: error code %lu\n"),
                                                  GetLastError());
#else
        if (pg_get_user_name(user_id, pwdbuf, sizeof(pwdbuf)))
                name = pwdbuf;
        else if (errorMessage)
                appendPQExpBuffer(errorMessage, "%s\n", pwdbuf);

the only caller of pg_get_user_home_dir() (path.c) has:

bool
get_home_path(char *ret_path)
{
#ifndef WIN32
        /*
         * We first consult $HOME.  If that's unset, try to get the info from
         * <pwd.h>.
         */
        const char *home;

        home = getenv("HOME");
        if (home == NULL || home[0] == '\0')
                return pg_get_user_home_dir(geteuid(), ret_path, MAXPGPATH);
        strlcpy(ret_path, home, MAXPGPATH);
        return true;
#else
        char       *tmppath;

        /*
         * Note: We use getenv() here because the more modern SHGetFolderPath()
         * would force the backend to link with shell32.lib, which eats valuable
         * desktop heap.  XXX This function is used only in psql, which already
         * brings in shell32 via libpq.  Moving this function to its own file
         * would keep it out of the backend, freeing it from this concern.
         */
        tmppath = getenv("APPDATA");
        if (!tmppath)
                return false;
        snprintf(ret_path, MAXPGPATH, "%s/postgresql", tmppath);
        return true;
#endif
}

How does this make any sort of sense?

Greetings,

Andres Freund


Reply via email to