X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/c1b8b17a7ac22123fe8d2d647265f19d2cc92625..ec392ff1a3ce6bd4d32371be454003f642812d5b:/src/xsmfns.c diff --git a/src/xsmfns.c b/src/xsmfns.c index 48aaa9bef8..42e23401c7 100644 --- a/src/xsmfns.c +++ b/src/xsmfns.c @@ -1,14 +1,14 @@ /* Session management module for systems which understand the X Session management protocol. -Copyright (C) 2002-2015 Free Software Foundation, Inc. +Copyright (C) 2002-2016 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -28,11 +28,10 @@ along with GNU Emacs. If not, see . */ #include #include +#include #include #include "lisp.h" -#include "systime.h" -#include "sysselect.h" #include "frame.h" #include "termhooks.h" #include "xterm.h" @@ -224,9 +223,8 @@ smc_save_yourself_CB (SmcConn smcConn, props[props_idx]->name = xstrdup (SmRestartCommand); props[props_idx]->type = xstrdup (SmLISTofARRAY8); /* /path/to/emacs, --smid=xxx --no-splash --chdir=dir ... */ - if (INT_MAX - 3 < initial_argc) + if (INT_ADD_WRAPV (initial_argc, 3, &i)) memory_full (SIZE_MAX); - i = 3 + initial_argc; props[props_idx]->num_vals = i; vp = xnmalloc (i, sizeof *vp); props[props_idx]->vals = vp; @@ -402,6 +400,14 @@ x_session_initialize (struct x_display_info *dpyinfo) SmcCallbacks callbacks; ptrdiff_t name_len = 0; + /* libSM seems to crash if pwd is missing - see bug#18851. */ + if (! get_current_dir_name ()) + { + fprintf (stderr, "Disabling session management due to pwd error: %s\n", + emacs_strerror (errno)); + return; + } + ice_fd = -1; doing_interact = false; @@ -539,7 +545,7 @@ syms_of_xsmfns (void) Changing the value does not change the session id used by Emacs. The value is nil if no session manager is running. See also `x-session-previous-id', `emacs-save-session-functions', -`emacs-session-save' and `emacs-session-restore'." */); +`emacs-session-save' and `emacs-session-restore'. */); Vx_session_id = Qnil; DEFVAR_LISP ("x-session-previous-id", Vx_session_previous_id, @@ -562,7 +568,7 @@ The session id Emacs has while it is running is in the variable same, depending on how the session manager works. See also `emacs-save-session-functions', `emacs-session-save' and -`emacs-session-restore'." */); +`emacs-session-restore'. */); Vx_session_previous_id = Qnil; defsubr (&Shandle_save_session);