diff options
Diffstat (limited to 'serial/manager.c')
-rw-r--r-- | serial/manager.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/serial/manager.c b/serial/manager.c index 3a64549d..528954a9 100644 --- a/serial/manager.c +++ b/serial/manager.c @@ -258,10 +258,9 @@ static int rfcomm_bind(bdaddr_t *src, bdaddr_t *dst, int16_t dev_id, uint8_t ch) static void open_notify(int fd, int err, void *data) { char port_name[16]; - const char *pname = port_name; - const char *owner; - DBusMessage *reply; + const char *owner, *pname = port_name; struct pending_connect *pc = data; + DBusMessage *reply; bdaddr_t dst; if (err) { @@ -499,8 +498,7 @@ static void record_reply(DBusPendingCall *call, void *data) goto fail; } if (dbus_message_has_member(pc->msg, "CreatePort")) { - char path[MAX_PATH_LENGTH]; - char port_name[16]; + char path[MAX_PATH_LENGTH], port_name[16]; const char *ppath = path; sdp_data_t *d; char *svcname = NULL; @@ -722,12 +720,10 @@ static DBusHandlerResult create_port(DBusConnection *conn, DBusMessage *reply; DBusError derr; bdaddr_t src, dst; - char path[MAX_PATH_LENGTH]; + char path[MAX_PATH_LENGTH], port_name[16], uuid[37]; const char *bda, *pattern, *ppath = path; long val; int dev_id, err; - char port_name[16]; - char uuid[37]; dbus_error_init(&derr); if (!dbus_message_get_args(msg, &derr, @@ -1129,13 +1125,15 @@ static void parse_port(char *key, char *value, void *data) snprintf(port_name, sizeof(port_name), "/dev/rfcomm%d", id); - port_register(connection, id, &dst, port_name, path); + if (port_register(connection, id, &dst, port_name, path) < 0) { + rfcomm_release(id); + return; + } dbus_connection_emit_signal(connection, SERIAL_MANAGER_PATH, SERIAL_MANAGER_INTERFACE, "PortCreated" , DBUS_TYPE_STRING, &ppath, DBUS_TYPE_INVALID); - } static void register_stored_ports(void) |