exit(0);
}
- if (config.ipc_socket_path == NULL)
- config.ipc_socket_path = getenv("I3SOCK");
-
- /* Fall back to a file name in /tmp/ based on the PID */
- if (config.ipc_socket_path == NULL)
- config.ipc_socket_path = get_process_filename("i3-ipc-socket");
+ if (config.ipc_socket_path == NULL) {
+ /* Fall back to a file name in /tmp/ based on the PID */
+ if ((config.ipc_socket_path = getenv("I3SOCK")) == NULL)
+ config.ipc_socket_path = get_process_filename("ipc-socket");
+ else
+ config.ipc_socket_path = sstrdup(config.ipc_socket_path);
+ }
uint32_t mask = XCB_CW_EVENT_MASK;
uint32_t values[] = { XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
if (ipc_socket == -1) {
ELOG("Could not create the IPC socket, IPC disabled\n");
} else {
+ free(config.ipc_socket_path);
struct ev_io *ipc_io = scalloc(sizeof(struct ev_io));
ev_io_init(ipc_io, ipc_new_client, ipc_socket, EV_READ);
ev_io_start(loop, ipc_io);
*
*/
char *get_process_filename(const char *prefix) {
- struct passwd *pw = getpwuid(getuid());
- const char *username = pw ? pw->pw_name : "unknown";
+ char *dir = getenv("XDG_RUNTIME_DIR");
+ if (dir == NULL) {
+ struct passwd *pw = getpwuid(getuid());
+ const char *username = pw ? pw->pw_name : "unknown";
+ if (asprintf(&dir, "/tmp/i3-%s", username) == -1) {
+ perror("asprintf()");
+ return NULL;
+ }
+ } else {
+ char *tmp;
+ if (asprintf(&tmp, "%s/i3", dir) == -1) {
+ perror("asprintf()");
+ return NULL;
+ }
+ dir = tmp;
+ }
+ if (!path_exists(dir)) {
+ if (mkdir(dir, 0700) == -1) {
+ perror("mkdir()");
+ return NULL;
+ }
+ }
char *filename;
- int res = asprintf(&filename, "/tmp/%s-%s.%d", prefix, username, getpid());
- if (res == -1) {
+ if (asprintf(&filename, "%s/%s.%d", dir, prefix, getpid()) == -1) {
perror("asprintf()");
- return NULL;
+ filename = NULL;
}
+ free(dir);
return filename;
}
* resolve the tildes in the specified path */
char *filename;
if (config.restart_state_path == NULL) {
- filename = get_process_filename("i3-restart-state");
+ filename = get_process_filename("restart-state");
if (!filename)
return NULL;
} else {