* dbusbind.c: Do not use XPNTR on a value that may be an integer.
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 30 Apr 2011 01:06:41 +0000 (18:06 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 30 Apr 2011 01:06:41 +0000 (18:06 -0700)
Reported by Stefan Monnier in
<http://lists.gnu.org/archive/html/emacs-devel/2011-04/msg00919.html>.
(xd_remove_watch, Fdbus_init_bus, xd_read_queued_messages): Use
SYMBOLP-guarded XSYMBOL, not XPNTR.

src/ChangeLog
src/dbusbind.c

index a2bf1fe..2b71a06 100644 (file)
@@ -1,3 +1,11 @@
+2011-04-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * dbusbind.c: Do not use XPNTR on a value that may be an integer.
+       Reported by Stefan Monnier in
+       <http://lists.gnu.org/archive/html/emacs-devel/2011-04/msg00919.html>.
+       (xd_remove_watch, Fdbus_init_bus, xd_read_queued_messages): Use
+       SYMBOLP-guarded XSYMBOL, not XPNTR.
+
 2011-04-29  Paul Eggert  <eggert@cs.ucla.edu>
 
        * lisp.h (EMACS_INTPTR): Remove.  All uses changed to intptr_t.
index 06feec3..7603534 100644 (file)
@@ -892,7 +892,7 @@ xd_remove_watch (DBusWatch *watch, void *data)
     return;
 
   /* Unset session environment.  */
-  if (data != NULL && data == (void *) XPNTR (QCdbus_session_bus))
+  if (SYMBOLP (QCdbus_session_bus) && XSYMBOL (QCdbus_session_bus) == data)
     {
       XD_DEBUG_MESSAGE ("unsetenv DBUS_SESSION_BUS_ADDRESS");
       unsetenv ("DBUS_SESSION_BUS_ADDRESS");
@@ -920,6 +920,8 @@ DEFUN ("dbus-init-bus", Fdbus_init_bus, Sdbus_init_bus, 1, 1, 0,
 {
   DBusConnection *connection;
 
+  CHECK_SYMBOL (bus);
+
   /* Open a connection to the bus.  */
   connection = xd_initialize (bus, TRUE);
 
@@ -929,7 +931,7 @@ DEFUN ("dbus-init-bus", Fdbus_init_bus, Sdbus_init_bus, 1, 1, 0,
                                            xd_add_watch,
                                            xd_remove_watch,
                                             xd_toggle_watch,
-                                           (void *) XPNTR (bus), NULL))
+                                           XSYMBOL (bus), NULL))
     XD_SIGNAL1 (build_string ("Cannot add watch functions"));
 
   /* Add bus to list of registered buses.  */
@@ -1824,7 +1826,7 @@ xd_read_queued_messages (int fd, void *data, int for_read)
   if (data != NULL)
     while (!NILP (busp))
       {
-       if (data == (void *) XPNTR (CAR_SAFE (busp)))
+       if (SYMBOLP (CAR_SAFE (busp)) && XSYMBOL (CAR_SAFE (busp)) == data)
          bus = CAR_SAFE (busp);
        busp = CDR_SAFE (busp);
       }