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