static void setup_sock_name(void) { const char *user = compute_user_name(); watchman_tmp_dir = get_env_with_fallback("TMPDIR", "TMP", "/tmp"); #ifdef _WIN32 if (!sock_name) { asprintf(&sock_name, "\\\\.\\pipe\\watchman-%s", user); } #else compute_file_name(&sock_name, user, "sock", "sockname"); #endif compute_file_name(&watchman_state_file, user, "state", "statefile"); compute_file_name(&log_name, user, "log", "logname"); #ifdef USE_GIMLI compute_file_name(&pid_file, user, "pid", "pidfile"); #endif #ifndef _WIN32 un.sun_family = PF_LOCAL; strcpy(un.sun_path, sock_name); if (strlen(sock_name) >= sizeof(un.sun_path) - 1) { w_log(W_LOG_ERR, "%s: path is too long\n", sock_name); abort(); } #endif }
static void setup_sock_name(void) { const char *user = get_env_with_fallback("USER", "LOGNAME", NULL); watchman_tmp_dir = get_env_with_fallback("TMPDIR", "TMP", "/tmp"); if (!user) { uid_t uid = getuid(); struct passwd *pw; pw = getpwuid(uid); if (!pw) { w_log(W_LOG_ERR, "getpwuid(%d) failed: %s. I don't know who you are\n", uid, strerror(errno)); abort(); } user = pw->pw_name; if (!user) { w_log(W_LOG_ERR, "watchman requires that you set $USER in your env\n"); abort(); } } compute_file_name(&sock_name, user, "", "sockname"); compute_file_name(&watchman_state_file, user, "state", "statefile"); compute_file_name(&log_name, user, "log", "logname"); #ifdef USE_GIMLI compute_file_name(&pid_file, user, "pid", "pidfile"); #endif un.sun_family = PF_LOCAL; strcpy(un.sun_path, sock_name); if (strlen(sock_name) >= sizeof(un.sun_path) - 1) { w_log(W_LOG_ERR, "%s: path is too long\n", sock_name); abort(); } }
static const char *compute_user_name(void) { const char *user = get_env_with_fallback("USER", "LOGNAME", NULL); #ifdef _WIN32 static char user_buf[256]; #endif if (!user) { #ifdef _WIN32 DWORD size = sizeof(user_buf); if (GetUserName(user_buf, &size)) { user_buf[size] = 0; user = user_buf; } else { w_log(W_LOG_FATAL, "GetUserName failed: %s. I don't know who you are\n", win32_strerror(GetLastError())); } #else uid_t uid = getuid(); struct passwd *pw; pw = getpwuid(uid); if (!pw) { w_log(W_LOG_FATAL, "getpwuid(%d) failed: %s. I don't know who you are\n", uid, strerror(errno)); } user = pw->pw_name; #endif if (!user) { w_log(W_LOG_ERR, "watchman requires that you set $USER in your env\n"); abort(); } } return user; }
static void setup_sock_name(void) { const char *user = get_env_with_fallback("USER", "LOGNAME", NULL); #ifdef _WIN32 char user_buf[256]; #endif watchman_tmp_dir = get_env_with_fallback("TMPDIR", "TMP", "/tmp"); if (!user) { #ifdef _WIN32 DWORD size = sizeof(user_buf); if (GetUserName(user_buf, &size)) { user_buf[size] = 0; user = user_buf; } else { w_log(W_LOG_FATAL, "GetUserName failed: %s. I don't know who you are\n", win32_strerror(GetLastError())); } #else uid_t uid = getuid(); struct passwd *pw; pw = getpwuid(uid); if (!pw) { w_log(W_LOG_FATAL, "getpwuid(%d) failed: %s. I don't know who you are\n", uid, strerror(errno)); } user = pw->pw_name; #endif if (!user) { w_log(W_LOG_ERR, "watchman requires that you set $USER in your env\n"); abort(); } } #ifdef _WIN32 if (!sock_name) { asprintf(&sock_name, "\\\\.\\pipe\\watchman-%s", user); } #else compute_file_name(&sock_name, user, "sock", "sockname"); #endif compute_file_name(&watchman_state_file, user, "state", "statefile"); compute_file_name(&log_name, user, "log", "logname"); #ifdef USE_GIMLI compute_file_name(&pid_file, user, "pid", "pidfile"); #endif #ifndef _WIN32 un.sun_family = PF_LOCAL; strcpy(un.sun_path, sock_name); if (strlen(sock_name) >= sizeof(un.sun_path) - 1) { w_log(W_LOG_ERR, "%s: path is too long\n", sock_name); abort(); } #endif }