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);