aboutsummaryrefslogtreecommitdiffstats
path: root/src/dbusbind.c
diff options
context:
space:
mode:
authorMichael Albinus2008-03-23 16:46:08 +0000
committerMichael Albinus2008-03-23 16:46:08 +0000
commita8e72f4f9b26914723f87fb2c5fbc10647f4dc3b (patch)
tree48458c6d2e4f36a8b544e020357948450999a935 /src/dbusbind.c
parent3a5b5d148c33df632a6b4ee2cee649994524eddf (diff)
downloademacs-a8e72f4f9b26914723f87fb2c5fbc10647f4dc3b.tar.gz
emacs-a8e72f4f9b26914723f87fb2c5fbc10647f4dc3b.zip
* dbusbind.c (xd_read_message): Removed extra copying of message
strings. Check for NULL `interface' or `member'.
Diffstat (limited to 'src/dbusbind.c')
-rw-r--r--src/dbusbind.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/src/dbusbind.c b/src/dbusbind.c
index 4bc48f3b6e9..029c53640de 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -165,7 +165,7 @@ Lisp_Object Vdbus_debug;
165 : DBUS_TYPE_INVALID) 165 : DBUS_TYPE_INVALID)
166 166
167/* Return a list pointer which does not have a Lisp symbol as car. */ 167/* Return a list pointer which does not have a Lisp symbol as car. */
168#define XD_NEXT_VALUE(object) \ 168#define XD_NEXT_VALUE(object) \
169 ((XD_DBUS_TYPE_P (CAR_SAFE (object))) ? CDR_SAFE (object) : object) 169 ((XD_DBUS_TYPE_P (CAR_SAFE (object))) ? CDR_SAFE (object) : object)
170 170
171/* Compute SIGNATURE of OBJECT. It must have a form that it can be 171/* Compute SIGNATURE of OBJECT. It must have a form that it can be
@@ -1140,10 +1140,7 @@ xd_read_message (bus)
1140 DBusMessageIter iter; 1140 DBusMessageIter iter;
1141 unsigned int dtype; 1141 unsigned int dtype;
1142 int mtype; 1142 int mtype;
1143 char uname[DBUS_MAXIMUM_NAME_LENGTH]; 1143 const char *uname, *path, *interface, *member;
1144 char path[DBUS_MAXIMUM_MATCH_RULE_LENGTH]; /* Unlimited in D-Bus spec. */
1145 char interface[DBUS_MAXIMUM_NAME_LENGTH];
1146 char member[DBUS_MAXIMUM_NAME_LENGTH];
1147 1144
1148 /* Open a connection to the bus. */ 1145 /* Open a connection to the bus. */
1149 connection = xd_initialize (bus); 1146 connection = xd_initialize (bus);
@@ -1175,11 +1172,15 @@ xd_read_message (bus)
1175 1172
1176 /* Read message type, unique name, object path, interface and member 1173 /* Read message type, unique name, object path, interface and member
1177 from the message. */ 1174 from the message. */
1178 mtype = dbus_message_get_type (dmessage); 1175 mtype = dbus_message_get_type (dmessage);
1179 strcpy (uname, dbus_message_get_sender (dmessage)); 1176 uname = dbus_message_get_sender (dmessage);
1180 strcpy (path, dbus_message_get_path (dmessage)); 1177 path = dbus_message_get_path (dmessage);
1181 strcpy (interface, dbus_message_get_interface (dmessage)); 1178 interface = dbus_message_get_interface (dmessage);
1182 strcpy (member, dbus_message_get_member (dmessage)); 1179 member = dbus_message_get_member (dmessage);
1180
1181 /* dbus-registered-functions-table requires non nil interface and member. */
1182 if ((NULL == interface) || (NULL == member))
1183 goto cleanup;
1183 1184
1184 XD_DEBUG_MESSAGE ("Event received: %d %s %s %s %s %s", 1185 XD_DEBUG_MESSAGE ("Event received: %d %s %s %s %s %s",
1185 mtype, uname, path, interface, member, 1186 mtype, uname, path, interface, member,
@@ -1210,11 +1211,8 @@ xd_read_message (bus)
1210 args); 1211 args);
1211 1212
1212 /* Add uname, path, interface and member to the event. */ 1213 /* Add uname, path, interface and member to the event. */
1213 event.arg = Fcons ((member == NULL ? Qnil : build_string (member)), 1214 event.arg = Fcons (build_string (member), event.arg);
1214 event.arg); 1215 event.arg = Fcons (build_string (interface), event.arg);
1215 event.arg = Fcons ((interface == NULL
1216 ? Qnil : build_string (interface)),
1217 event.arg);
1218 event.arg = Fcons ((path == NULL ? Qnil : build_string (path)), 1216 event.arg = Fcons ((path == NULL ? Qnil : build_string (path)),
1219 event.arg); 1217 event.arg);
1220 event.arg = Fcons ((uname == NULL ? Qnil : build_string (uname)), 1218 event.arg = Fcons ((uname == NULL ? Qnil : build_string (uname)),
@@ -1235,7 +1233,7 @@ xd_read_message (bus)
1235 value = CDR_SAFE (value); 1233 value = CDR_SAFE (value);
1236 } 1234 }
1237 1235
1238 /* Cleanup. */ 1236 cleanup:
1239 dbus_message_unref (dmessage); 1237 dbus_message_unref (dmessage);
1240 RETURN_UNGCPRO (Qnil); 1238 RETURN_UNGCPRO (Qnil);
1241} 1239}