summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hcid/dbus-adapter.c17
-rw-r--r--hcid/dbus-common.c9
-rw-r--r--hcid/dbus-database.c26
-rw-r--r--hcid/dbus-hci.c67
-rw-r--r--hcid/dbus-manager.c10
-rw-r--r--hcid/dbus-rfcomm.c83
-rw-r--r--hcid/dbus-sdp.c77
-rw-r--r--hcid/dbus-security.c94
-rw-r--r--hcid/dbus-test.c5
-rw-r--r--hcid/main.c18
-rw-r--r--hcid/security.c60
11 files changed, 134 insertions, 332 deletions
diff --git a/hcid/dbus-adapter.c b/hcid/dbus-adapter.c
index 2fec2542..34ababa1 100644
--- a/hcid/dbus-adapter.c
+++ b/hcid/dbus-adapter.c
@@ -203,7 +203,7 @@ int pending_remote_name_cancel(struct adapter *adapter)
}
/* free discovered devices list */
- g_slist_foreach(adapter->found_devices, (GFunc) free, NULL);
+ g_slist_foreach(adapter->found_devices, (GFunc) g_free, NULL);
g_slist_free(adapter->found_devices);
adapter->found_devices = NULL;
@@ -217,12 +217,7 @@ static struct bonding_request_info *bonding_request_new(bdaddr_t *peer,
{
struct bonding_request_info *bonding;
- bonding = malloc(sizeof(*bonding));
-
- if (!bonding)
- return NULL;
-
- memset(bonding, 0, sizeof(*bonding));
+ bonding = g_new0(struct bonding_request_info, 1);
bacpy(&bonding->bdaddr, peer);
@@ -1755,9 +1750,7 @@ static DBusHandlerResult adapter_dc_remote_device(DBusConnection *conn,
if(adapter->pending_dc)
return error_disconnect_in_progress(conn, msg);
- adapter->pending_dc = malloc(sizeof(*adapter->pending_dc));
- if(!adapter->pending_dc)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ adapter->pending_dc = g_new0(struct pending_dc_info, 1);
/* Start waiting... */
adapter->pending_dc->timeout_id =
@@ -1766,7 +1759,7 @@ static DBusHandlerResult adapter_dc_remote_device(DBusConnection *conn,
adapter);
if(!adapter->pending_dc->timeout_id) {
- free(adapter->pending_dc);
+ g_free(adapter->pending_dc);
adapter->pending_dc = NULL;
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
@@ -2054,7 +2047,7 @@ static DBusHandlerResult adapter_cancel_bonding(DBusConnection *conn,
}
adapter->pin_reqs = g_slist_remove(adapter->pin_reqs, pin_req);
- free(pin_req);
+ g_free(pin_req);
}
g_io_channel_close(adapter->bonding->io);
diff --git a/hcid/dbus-common.c b/hcid/dbus-common.c
index aabd58cd..2c84a5b2 100644
--- a/hcid/dbus-common.c
+++ b/hcid/dbus-common.c
@@ -273,11 +273,7 @@ static gboolean system_bus_reconnect(void *data)
return TRUE;
}
- dl = malloc(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));
- if (!dl) {
- error("Can't allocate memory");
- goto failed;
- }
+ dl = g_malloc0(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));
dl->dev_num = HCI_MAX_DEV;
dr = dl->dev_req;
@@ -300,8 +296,7 @@ failed:
if (sk >= 0)
close(sk);
- if (dl)
- free(dl);
+ g_free(dl);
return ret_val;
}
diff --git a/hcid/dbus-database.c b/hcid/dbus-database.c
index 90175592..ab3a6938 100644
--- a/hcid/dbus-database.c
+++ b/hcid/dbus-database.c
@@ -82,7 +82,7 @@ static void exit_callback(const char *name, void *user_data)
unregister_sdp_record(user_record->handle);
if (user_record->sender)
- free(user_record->sender);
+ g_free(user_record->sender);
free(user_record);
}
@@ -105,11 +105,7 @@ static DBusHandlerResult add_service_record(DBusConnection *conn,
if (len <= 0)
return error_invalid_arguments(conn, msg);
- user_record = malloc(sizeof(*user_record));
- if (!user_record)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
- memset(user_record, 0, sizeof(*user_record));
+ user_record = g_new0(struct record_data, 1);
if (sdp_server_enable) {
sdp_record = sdp_extract_pdu(record, &scanned);
@@ -147,7 +143,7 @@ static DBusHandlerResult add_service_record(DBusConnection *conn,
sender = dbus_message_get_sender(msg);
- user_record->sender = strdup(sender);
+ user_record->sender = g_strdup(sender);
records = g_slist_append(records, user_record);
@@ -175,23 +171,19 @@ static DBusHandlerResult add_service_record_from_xml(DBusConnection *conn,
DBUS_TYPE_STRING, &record, DBUS_TYPE_INVALID) == FALSE)
return error_invalid_arguments(conn, msg);
- user_record = malloc(sizeof(*user_record));
- if (!user_record)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
- memset(user_record, 0, sizeof(*user_record));
+ user_record = g_new0(struct record_data, 1);
sdp_record = sdp_xml_parse_record(record, strlen(record));
if (!sdp_record) {
error("Parsing of XML service record failed");
- free(user_record);
+ g_free(user_record);
return error_failed(conn, msg, EIO);
}
if (sdp_server_enable) {
if (add_record_to_server(sdp_record) < 0) {
error("Failed to register service record");
- free(user_record);
+ g_free(user_record);
sdp_record_free(sdp_record);
return error_failed(conn, msg, EIO);
}
@@ -200,7 +192,7 @@ static DBusHandlerResult add_service_record_from_xml(DBusConnection *conn,
} else {
if (register_sdp_record(sdp_record) < 0) {
error("Failed to register service record");
- free(user_record);
+ g_free(user_record);
sdp_record_free(sdp_record);
return error_failed(conn, msg, EIO);
}
@@ -212,7 +204,7 @@ static DBusHandlerResult add_service_record_from_xml(DBusConnection *conn,
sender = dbus_message_get_sender(msg);
- user_record->sender = strdup(sender);
+ user_record->sender = g_strdup(sender);
records = g_slist_append(records, user_record);
@@ -256,7 +248,7 @@ static DBusHandlerResult remove_service_record(DBusConnection *conn,
unregister_sdp_record(handle);
if (user_record->sender)
- free(user_record->sender);
+ g_free(user_record->sender);
free(user_record);
diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c
index 49da2140..5db47f4f 100644
--- a/hcid/dbus-hci.c
+++ b/hcid/dbus-hci.c
@@ -134,11 +134,8 @@ int found_device_add(GSList **list, bdaddr_t *bdaddr, int8_t rssi,
return -EALREADY;
}
- dev = malloc(sizeof(*dev));
- if (!dev)
- return -ENOMEM;
+ dev = g_new0(struct remote_dev_info, 1);
- memset(dev, 0, sizeof(*dev));
bacpy(&dev->bdaddr, bdaddr);
dev->rssi = rssi;
dev->name_status = name_status;
@@ -191,11 +188,8 @@ static int active_conn_append(GSList **list, bdaddr_t *bdaddr,
{
struct active_conn_info *dev;
- dev = malloc(sizeof(*dev));
- if (!dev)
- return -1;
+ dev = g_new0(struct active_conn_info, 1);
- memset(dev, 0 , sizeof(*dev));
bacpy(&dev->bdaddr, bdaddr);
dev->handle = handle;
@@ -442,7 +436,7 @@ int unregister_adapter_path(const char *path)
if (adapter->found_devices) {
g_slist_foreach(adapter->found_devices,
- (GFunc) free, NULL);
+ (GFunc) g_free, NULL);
g_slist_free(adapter->found_devices);
adapter->found_devices = NULL;
}
@@ -456,7 +450,7 @@ int unregister_adapter_path(const char *path)
if (adapter->pin_reqs) {
g_slist_foreach(adapter->pin_reqs,
- (GFunc) free, NULL);
+ (GFunc) g_free, NULL);
g_slist_free(adapter->pin_reqs);
adapter->pin_reqs = NULL;
}
@@ -476,7 +470,7 @@ int unregister_adapter_path(const char *path)
dc_pending_timeout_cleanup(adapter);
}
- free (adapter);
+ g_free (adapter);
unreg:
if (!dbus_connection_unregister_object_path (connection, path)) {
@@ -503,15 +497,13 @@ int hcid_dbus_register_device(uint16_t id)
snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id);
- adapter = malloc(sizeof(struct adapter));
+ adapter = g_try_new0(struct adapter, 1);
if (!adapter) {
error("Failed to alloc memory to D-Bus path register data (%s)",
path);
return -1;
}
- memset(adapter, 0, sizeof(struct adapter));
-
adapter->dev_id = id;
adapter->pdiscov_resolve_names = 1;
@@ -651,19 +643,14 @@ int hcid_dbus_start_device(uint16_t id)
* the are active connections before the daemon've started
*/
- cl = malloc(10 * sizeof(*ci) + sizeof(*cl));
- if (!cl)
- goto failed;
+ cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
cl->dev_id = id;
cl->conn_num = 10;
ci = cl->conn_info;
- if (ioctl(dd, HCIGETCONNLIST, (void *) cl) < 0) {
- free(cl);
- cl = NULL;
+ if (ioctl(dd, HCIGETCONNLIST, cl) < 0)
goto failed;
- }
for (i = 0; i < cl->conn_num; i++, ci++)
active_conn_append(&adapter->active_conn,
@@ -678,8 +665,7 @@ failed:
if (dd >= 0)
hci_close_dev(dd);
- if (cl)
- free(cl);
+ g_free(cl);
return ret;
}
@@ -745,7 +731,7 @@ int hcid_dbus_stop_device(uint16_t id)
}
if (adapter->found_devices) {
- g_slist_foreach(adapter->found_devices, (GFunc) free, NULL);
+ g_slist_foreach(adapter->found_devices, (GFunc) g_free, NULL);
g_slist_free(adapter->found_devices);
adapter->found_devices = NULL;
}
@@ -757,14 +743,14 @@ int hcid_dbus_stop_device(uint16_t id)
}
if (adapter->pin_reqs) {
- g_slist_foreach(adapter->pin_reqs, (GFunc) free, NULL);
+ g_slist_foreach(adapter->pin_reqs, (GFunc) g_free, NULL);
g_slist_free(adapter->pin_reqs);
adapter->pin_reqs = NULL;
}
if (adapter->active_conn) {
g_slist_foreach(adapter->active_conn, (GFunc) send_dc_signal, path);
- g_slist_foreach(adapter->active_conn, (GFunc) free, NULL);
+ g_slist_foreach(adapter->active_conn, (GFunc) g_free, NULL);
g_slist_free(adapter->active_conn);
adapter->active_conn = NULL;
}
@@ -816,13 +802,8 @@ void hcid_dbus_pending_pin_req_add(bdaddr_t *sba, bdaddr_t *dba)
return;
}
- info = malloc(sizeof(struct pending_pin_info));
- if (!info) {
- error("Out of memory when adding new pin request");
- return;
- }
+ info = g_new0(struct pending_pin_info, 1);
- memset(info, 0, sizeof(struct pending_pin_info));
bacpy(&info->bdaddr, dba);
adapter->pin_reqs = g_slist_append(adapter->pin_reqs, info);
@@ -903,7 +884,7 @@ void hcid_dbus_bonding_process_complete(bdaddr_t *local, bdaddr_t *peer,
if (l) {
void *d = l->data;
adapter->pin_reqs = g_slist_remove(adapter->pin_reqs, l->data);
- free(d);
+ g_free(d);
if (!status) {
message = dev_signal_factory(adapter->dev_id,
@@ -1069,7 +1050,7 @@ int found_device_req_name(struct adapter *adapter)
/* if failed, request the next element */
/* remove the element from the list */
adapter->found_devices = g_slist_remove(adapter->found_devices, dev);
- free(dev);
+ g_free(dev);
/* get the next element */
l = g_slist_find_custom(adapter->found_devices, &match,
@@ -1183,7 +1164,7 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)
}
/* free discovered devices list */
- g_slist_foreach(adapter->found_devices, (GFunc) free, NULL);
+ g_slist_foreach(adapter->found_devices, (GFunc) g_free, NULL);
g_slist_free(adapter->found_devices);
adapter->found_devices = NULL;
@@ -1287,7 +1268,7 @@ void hcid_dbus_periodic_inquiry_exit(bdaddr_t *local, uint8_t status)
adapter->discov_type &= ~(PERIODIC_INQUIRY | RESOLVE_NAME);
/* free discovered devices list */
- g_slist_foreach(adapter->found_devices, (GFunc) free, NULL);
+ g_slist_foreach(adapter->found_devices, (GFunc) g_free, NULL);
g_slist_free(adapter->found_devices);
adapter->found_devices = NULL;
@@ -1546,7 +1527,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,
goto done; /* skip if a new request has been sent */
/* free discovered devices list */
- g_slist_foreach(adapter->found_devices, (GFunc) free, NULL);
+ g_slist_foreach(adapter->found_devices, (GFunc) g_free, NULL);
g_slist_free(adapter->found_devices);
adapter->found_devices = NULL;
@@ -1624,7 +1605,7 @@ void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle,
if (l) {
struct pending_pin_req *p = l->data;
adapter->pin_reqs = g_slist_remove(adapter->pin_reqs, p);
- free(p);
+ g_free(p);
}
if (adapter->bonding)
@@ -1702,7 +1683,7 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,
if (l) {
struct pending_pin_req *p = l->data;
adapter->pin_reqs = g_slist_remove(adapter->pin_reqs, p);
- free(p);
+ g_free(p);
}
/* Check if there is a pending CreateBonding request */
@@ -1750,7 +1731,7 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,
send_message_and_unref(connection, message);
adapter->active_conn = g_slist_remove(adapter->active_conn, dev);
- free(dev);
+ g_free(dev);
failed:
if (peer_addr)
@@ -2009,7 +1990,7 @@ void create_bond_req_exit(const char *name, struct adapter *adapter)
}
adapter->pin_reqs = g_slist_remove(adapter->pin_reqs, p);
- free(p);
+ g_free(p);
}
g_io_channel_close(adapter->bonding->io);
@@ -2131,7 +2112,7 @@ cleanup:
* Reset discov_requestor and discover_state in the remote name
* request event handler or in the inquiry complete handler.
*/
- g_slist_foreach(adapter->found_devices, (GFunc) free, NULL);
+ g_slist_foreach(adapter->found_devices, (GFunc) g_free, NULL);
g_slist_free(adapter->found_devices);
adapter->found_devices = NULL;
@@ -2223,7 +2204,7 @@ cleanup:
* Reset pdiscov_requestor and pdiscov_active is done when the
* cmd complete event for exit periodic inquiry mode cmd arrives.
*/
- g_slist_foreach(adapter->found_devices, (GFunc) free, NULL);
+ g_slist_foreach(adapter->found_devices, (GFunc) g_free, NULL);
g_slist_free(adapter->found_devices);
adapter->found_devices = NULL;
diff --git a/hcid/dbus-manager.c b/hcid/dbus-manager.c
index a81cbc8e..b07d3342 100644
--- a/hcid/dbus-manager.c
+++ b/hcid/dbus-manager.c
@@ -144,11 +144,7 @@ static DBusHandlerResult list_adapters(DBusConnection *conn,
if (sk < 0)
return error_failed(conn, msg, errno);
- dl = malloc(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));
- if (!dl) {
- close(sk);
- return error_out_of_memory(conn, msg);
- }
+ dl = g_malloc0(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));
dl->dev_num = HCI_MAX_DEV;
dr = dl->dev_req;
@@ -165,7 +161,7 @@ static DBusHandlerResult list_adapters(DBusConnection *conn,
reply = dbus_message_new_method_return(msg);
if (!reply) {
close(sk);
- free(dl);
+ g_free(dl);
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
@@ -189,7 +185,7 @@ static DBusHandlerResult list_adapters(DBusConnection *conn,
dbus_message_iter_close_container(&iter, &array_iter);
- free(dl);
+ g_free(dl);
close(sk);
diff --git a/hcid/dbus-rfcomm.c b/hcid/dbus-rfcomm.c
index d99939d1..405764c9 100644
--- a/hcid/dbus-rfcomm.c
+++ b/hcid/dbus-rfcomm.c
@@ -99,15 +99,14 @@ static char *rfcomm_node_name_from_id(int16_t id, char *dev, size_t len)
static void rfcomm_node_free(struct rfcomm_node *node)
{
- if (node->owner)
- free(node->owner);
+ g_free(node->owner);
if (node->io) {
g_source_remove(node->io_id);
g_io_channel_unref(node->io);
}
if (node->conn)
dbus_connection_unref(node->conn);
- free(node);
+ g_free(node);
}
static struct rfcomm_node *find_node_by_name(GSList *nodes, const char *name)
@@ -161,15 +160,14 @@ static struct pending_connect *find_pending_connect_by_service(const char *bda,
static void pending_connect_free(struct pending_connect *c)
{
- if (c->svc)
- free(c->svc);
+ g_free(c->svc);
if (c->io)
g_io_channel_unref(c->io);
if (c->msg)
dbus_message_unref(c->msg);
if (c->conn)
dbus_connection_unref(c->conn);
- free(c);
+ g_free(c);
}
static int rfcomm_release(struct rfcomm_node *node, int *err)
@@ -242,11 +240,7 @@ static void rfcomm_connect_cb_devnode_opened(int fd, struct pending_connect *c,
goto failed;
}
- node->owner = strdup(dbus_message_get_sender(c->msg));
- if (!node->owner) {
- error_failed(c->conn, c->msg, ENOMEM);
- goto failed;
- }
+ node->owner = g_strdup(dbus_message_get_sender(c->msg));
/* Check if the caller is still present */
if (!dbus_bus_name_has_owner(c->conn, node->owner, NULL)) {
@@ -355,12 +349,7 @@ static gboolean rfcomm_connect_cb(GIOChannel *chan, GIOCondition cond,
goto failed;
}
- node = malloc(sizeof(struct rfcomm_node));
- if (!node) {
- error_failed(c->conn, c->msg, ENOMEM);
- goto failed;
- }
- memset(node, 0, sizeof(*node));
+ node = g_new0(struct rfcomm_node, 1);
/* Create the rfcomm device node */
memset(&req, 0, sizeof(req));
@@ -410,22 +399,10 @@ static int rfcomm_connect(DBusConnection *conn, DBusMessage *msg, bdaddr_t *src,
int sk = -1;
struct pending_connect *c = NULL;
- c = malloc(sizeof(struct pending_connect));
- if (!c) {
- if (err)
- *err = ENOMEM;
- goto failed;
- }
- memset(c, 0, sizeof(struct pending_connect));
+ c = g_new0(struct pending_connect, 1);
- if (svc) {
- c->svc = strdup(svc);
- if (!c->svc) {
- if (err)
- *err = ENOMEM;
- goto failed;
- }
- }
+ if (svc)
+ c->svc = g_strdup(svc);
c->laddr.rc_family = AF_BLUETOOTH;
bacpy(&c->laddr.rc_bdaddr, src);
@@ -512,21 +489,9 @@ static struct rfcomm_node *rfcomm_bind(bdaddr_t *src, const char *bda,
str2ba(bda, &req.dst);
req.channel = ch;
- node = malloc(sizeof(struct rfcomm_node));
- if (!node) {
- if (err)
- *err = ENOMEM;
- return NULL;
- }
- memset(node, 0, sizeof(struct rfcomm_node));
+ node = g_new0(struct rfcomm_node, 1);
- node->owner = strdup(owner);
- if (!node->owner) {
- if (err)
- *err = ENOMEM;
- rfcomm_node_free(node);
- return NULL;
- }
+ node->owner = g_strdup(owner);
node->id = ioctl(rfcomm_ctl, RFCOMMCREATEDEV, &req);
if (node->id < 0) {
@@ -562,23 +527,15 @@ static rfcomm_continue_data_t *rfcomm_continue_data_new(DBusConnection *conn,
{
rfcomm_continue_data_t *new;
- new = malloc(sizeof(*new));
- if (!new)
- return NULL;
+ new = g_new(rfcomm_continue_data_t, 1);
- new->dst = strdup(dst);
+ new->dst = g_strdup(dst);
if (!new->dst) {
- free(new);
- return NULL;
- }
-
- new->svc = strdup(svc);
- if (!new->svc) {
- free(new->dst);
- free(new);
+ g_free(new);
return NULL;
}
+ new->svc = g_strdup(svc);
new->conn = dbus_connection_ref(conn);
new->msg = dbus_message_ref(msg);
new->adapter = adapter;
@@ -590,9 +547,9 @@ static void rfcomm_continue_data_free(rfcomm_continue_data_t *d)
{
dbus_connection_unref(d->conn);
dbus_message_unref(d->msg);
- free(d->svc);
- free(d->dst);
- free(d);
+ g_free(d->svc);
+ g_free(d->dst);
+ g_free(d);
}
static void rfcomm_conn_req_continue(sdp_record_t *rec, void *data, int err)
@@ -609,7 +566,7 @@ static void rfcomm_conn_req_continue(sdp_record_t *rec, void *data, int err)
if (!sdp_get_access_protos(rec, &protos)) {
ch = sdp_get_proto_port(protos, RFCOMM_UUID);
- sdp_list_foreach(protos, (sdp_list_func_t)sdp_list_free, NULL);
+ sdp_list_foreach(protos, (sdp_list_func_t) sdp_list_free, NULL);
sdp_list_free(protos, NULL);
}
if (ch == -1) {
@@ -809,7 +766,7 @@ static void rfcomm_bind_req_continue(sdp_record_t *rec, void *data, int err)
if (!sdp_get_access_protos(rec, &protos)) {
ch = sdp_get_proto_port(protos, RFCOMM_UUID);
- sdp_list_foreach(protos, (sdp_list_func_t)sdp_list_free, NULL);
+ sdp_list_foreach(protos, (sdp_list_func_t) sdp_list_free, NULL);
sdp_list_free(protos, NULL);
}
if (ch == -1) {
diff --git a/hcid/dbus-sdp.c b/hcid/dbus-sdp.c
index 54de8aaf..da0f13b2 100644
--- a/hcid/dbus-sdp.c
+++ b/hcid/dbus-sdp.c
@@ -169,18 +169,10 @@ static struct pending_connect *pending_connect_new(DBusConnection *conn, DBusMes
if (!dst)
return NULL;
- c = malloc(sizeof(*c));
- if (!c)
- return NULL;
- memset(c, 0, sizeof(*c));
+ c = g_new0(struct pending_connect, 1);
- if (dst) {
- c->dst = strdup(dst);
- if (!c->dst) {
- free(c);
- return NULL;
- }
- }
+ if (dst)
+ c->dst = g_strdup(dst);
c->conn = dbus_connection_ref(conn);
c->rq = dbus_message_ref(msg);
@@ -194,8 +186,7 @@ static void pending_connect_free(struct pending_connect *c)
if (!c)
return;
- if (c->dst)
- free(c->dst);
+ g_free(c->dst);
if (c->rq)
dbus_message_unref(c->rq);
@@ -203,7 +194,7 @@ static void pending_connect_free(struct pending_connect *c)
if (c->conn)
dbus_connection_unref(c->conn);
- free(c);
+ g_free(c);
}
static struct pending_connect *find_pending_connect(const char *dst)
@@ -245,9 +236,7 @@ static int sdp_store_record(const char *src, const char *dst, uint32_t handle, u
snprintf(key, sizeof(key), "%s#%08X", dst, handle);
- value = malloc(size * 2 + 1);
- if (!value)
- return -ENOMEM;
+ value = g_malloc(size * 2 + 1);
value[0] = '\0';
@@ -256,7 +245,7 @@ static int sdp_store_record(const char *src, const char *dst, uint32_t handle, u
err = textfile_put(filename, key, value);
- free(value);
+ g_free(value);
return err;
}
@@ -277,7 +266,7 @@ static void transaction_context_free(void *udata)
if (ctxt->session)
sdp_close(ctxt->session);
- free(ctxt);
+ g_free(ctxt);
}
static get_record_data_t *get_record_data_new(uint16_t dev_id, const char *dst,
@@ -286,16 +275,9 @@ static get_record_data_t *get_record_data_new(uint16_t dev_id, const char *dst,
{
get_record_data_t *n;
- n = malloc(sizeof(*n));
- if (!n)
- return NULL;
-
- n->dst = strdup(dst);
- if (!n->dst) {
- free(n);
- return NULL;
- }
+ n = g_new(get_record_data_t, 1);
+ n->dst = g_strdup(dst);
n->dev_id = dev_id;
n->search_data = search_data;
n->cb = cb;
@@ -306,9 +288,9 @@ static get_record_data_t *get_record_data_new(uint16_t dev_id, const char *dst,
static void get_record_data_free(get_record_data_t *d)
{
- free(d->search_data);
- free(d->dst);
- free(d);
+ g_free(d->search_data);
+ g_free(d->dst);
+ g_free(d);
}
static inline void get_record_data_call_cb(get_record_data_t *d,
@@ -594,12 +576,7 @@ static gboolean sdp_client_connect_cb(GIOChannel *chan,
goto failed;
}
- ctxt = malloc(sizeof(*ctxt));
- if (!ctxt) {
- err = ENOMEM;
- goto failed;
- }
- memset(ctxt, 0, sizeof(*ctxt));
+ ctxt = g_new0(struct transaction_context, 1);
ctxt->conn = dbus_connection_ref(c->conn);
ctxt->rq = dbus_message_ref(c->rq);
@@ -926,17 +903,11 @@ int get_record_with_handle(DBusConnection *conn, DBusMessage *msg,
return -EINPROGRESS;
}
- rec_handle = malloc(sizeof(uint32_t));
- if (!rec_handle)
- return -ENOMEM;
+ rec_handle = g_new(uint32_t, 1);
*rec_handle = handle;
d = get_record_data_new(dev_id, dst, rec_handle, cb, data);
- if (!d) {
- free(rec_handle);
- return -ENOMEM;
- }
if (!(c = connect_request(conn, msg, dev_id, dst,
get_rec_with_handle_conn_cb, &err))) {
@@ -988,14 +959,10 @@ static void get_rec_with_uuid_comp_cb(uint8_t type, uint16_t err,
goto failed;
pdata += sizeof(uint16_t);
- handle = malloc(sizeof(*handle));
- if (!handle) {
- cb_err = ENOMEM;
- goto failed;
- }
- *handle = ntohl(bt_get_unaligned((uint32_t*)pdata));
+ handle = g_new(uint32_t, 1);
+ *handle = ntohl(bt_get_unaligned((uint32_t*) pdata));
- free(d->search_data);
+ g_free(d->search_data);
d->search_data = handle;
cb_err = get_rec_with_handle_conn_cb(ctxt);
@@ -1055,17 +1022,11 @@ int get_record_with_uuid(DBusConnection *conn, DBusMessage *msg,
return -EINPROGRESS;
}
- sdp_uuid = malloc(sizeof(uuid_t));
- if (!sdp_uuid)
- return -ENOMEM;
+ sdp_uuid = g_new(uuid_t, 1);
memcpy(sdp_uuid, uuid, sizeof(uuid_t));
d = get_record_data_new(dev_id, dst, sdp_uuid, cb, data);
- if (!d) {
- free(sdp_uuid);
- return -ENOMEM;
- }
if (!(c = connect_request(conn, msg, dev_id, dst,
get_rec_with_uuid_conn_cb, &err))) {
diff --git a/hcid/dbus-security.c b/hcid/dbus-security.c
index f6897079..ee3b96eb 100644
--- a/hcid/dbus-security.c
+++ b/hcid/dbus-security.c
@@ -192,37 +192,19 @@ static struct passkey_agent *passkey_agent_new(struct adapter *adapter, DBusConn
{
struct passkey_agent *agent;
- agent = malloc(sizeof(struct passkey_agent));
- if (!agent)
- return NULL;
-
- memset(agent, 0, sizeof(struct passkey_agent));
+ agent = g_new0(struct passkey_agent, 1);
agent->adapter = adapter;
- agent->name = strdup(name);
- if (!agent->name)
- goto mem_fail;
-
- agent->path = strdup(path);
- if (!agent->path)
- goto mem_fail;
+ agent->name = g_strdup(name);
+ agent->path = g_strdup(path);
- if (addr) {
+ if (addr)
agent->addr = strdup(addr);
- if (!agent->addr)
- goto mem_fail;
- }
agent->conn = dbus_connection_ref(conn);
return agent;
-
-mem_fail:
- /* So passkey_agent_free doesn't try to call Relese */
- agent->exited = 1;
- passkey_agent_free(agent);
- return NULL;
}
static int agent_cmp(const struct passkey_agent *a, const struct passkey_agent *b)
@@ -511,11 +493,11 @@ static void auth_agent_call_cancel(struct auth_agent_req *req)
static void auth_agent_free(struct authorization_agent *agent)
{
- free(agent->name);
- free(agent->path);
+ g_free(agent->name);
+ g_free(agent->path);
dbus_connection_unref(agent->conn);
g_slist_free(agent->pending_requests);
- free(agent);
+ g_free(agent);
}
static struct authorization_agent *auth_agent_new(DBusConnection *conn,
@@ -524,29 +506,14 @@ static struct authorization_agent *auth_agent_new(DBusConnection *conn,
{
struct authorization_agent *agent;
- agent = malloc(sizeof(*agent));
- if (!agent)
- return NULL;
- memset(agent, 0, sizeof(*agent));
+ agent = g_new0(struct authorization_agent, 1);
- agent->name = strdup(name);
- if (!agent->name)
- goto failed;
-
- agent->path = strdup(path);
- if (!agent->path)
- goto failed;
+ agent->name = g_strdup(name);
+ agent->path = g_strdup(path);
agent->conn = dbus_connection_ref(conn);
return agent;
-
-failed:
- if (agent->name)
- free(agent->name);
- free(agent);
-
- return NULL;
}
static void default_auth_agent_exited(const char *name, void *data)
@@ -1042,8 +1009,8 @@ done:
dbus_pending_call_cancel(req->call);
if (req->call)
dbus_pending_call_unref(req->call);
- free(req->path);
- free(req);
+ g_free(req->path);
+ g_free(req);
if (agent != default_agent) {
agent->adapter->passkey_agents = g_slist_remove(agent->adapter->passkey_agents,
@@ -1067,10 +1034,7 @@ static int call_passkey_agent(DBusConnection *conn,
debug("Calling PasskeyAgent.Request: name=%s, path=%s",
agent->name, agent->path);
- req = malloc(sizeof(struct pending_agent_request));
- if (!req)
- goto failed;
- memset(req, 0, sizeof(struct pending_agent_request));
+ req = g_new0(struct pending_agent_request, 1);
req->dev = dev;
bacpy(&req->sba, sba);
bacpy(&req->bda, dba);
@@ -1090,10 +1054,8 @@ static int call_passkey_agent(DBusConnection *conn,
return 0;
failed:
- if (req) {
- free(req->path);
- free(req);
- }
+ g_free(req->path);
+ g_free(req);
hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
@@ -1224,10 +1186,9 @@ done:
dbus_pending_call_cancel(req->call);
if (req->call)
dbus_pending_call_unref(req->call);
- if (req->pin)
- free(req->pin);
- free(req->path);
- free(req);
+ g_free(req->pin);
+ g_free(req->path);
+ g_free(req);
if (agent != default_agent) {
agent->adapter->passkey_agents = g_slist_remove(agent->adapter->passkey_agents,
@@ -1251,10 +1212,7 @@ static int call_confirm_agent(DBusConnection *conn,
debug("Calling PasskeyAgent.Confirm: name=%s, path=%s",
agent->name, agent->path);
- req = malloc(sizeof(struct pending_agent_request));
- if (!req)
- goto failed;
- memset(req, 0, sizeof(struct pending_agent_request));
+ req = g_new0(struct pending_agent_request, 1);
req->dev = dev;
bacpy(&req->sba, sba);
bacpy(&req->bda, dba);
@@ -1278,10 +1236,9 @@ static int call_confirm_agent(DBusConnection *conn,
failed:
if (req) {
- if (req->pin)
- free(req->pin);
- free(req->path);
- free(req);
+ g_free(req->pin);
+ g_free(req->path);
+ g_free(req);
}
hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
@@ -1351,10 +1308,9 @@ static void send_cancel_request(struct pending_agent_request *req)
dbus_pending_call_cancel(req->call);
dbus_pending_call_unref(req->call);
- if (req->pin)
- free(req->pin);
- free(req->path);
- free(req);
+ g_free(req->pin);
+ g_free(req->path);
+ g_free(req);
}
static void release_agent(struct passkey_agent *agent)
diff --git a/hcid/dbus-test.c b/hcid/dbus-test.c
index 78766a49..1794f276 100644
--- a/hcid/dbus-test.c
+++ b/hcid/dbus-test.c
@@ -93,10 +93,7 @@ static struct audit *audit_new(DBusConnection *conn, DBusMessage *msg,
path = dbus_message_get_path(msg);
requestor = dbus_message_get_sender(msg);
- audit = malloc(sizeof(struct audit));
- if (!audit)
- return NULL;
- memset(audit, 0, sizeof(struct audit));
+ audit = g_new0(struct audit, 1);
audit->requestor = strdup(requestor);
if (!audit->requestor) {
diff --git a/hcid/main.c b/hcid/main.c
index a790b3da..01ca2638 100644
--- a/hcid/main.c
+++ b/hcid/main.c
@@ -70,19 +70,19 @@ struct device_opts *alloc_device_opts(char *ref)
{
struct device_list *device;
- device = malloc(sizeof(struct device_list));
+ device = g_try_new(struct device_list, 1);
if (!device) {
info("Can't allocate devlist opts buffer: %s (%d)",
strerror(errno), errno);
exit(1);
}
- device->ref = strdup(ref);
+ device->ref = g_strdup(ref);
device->next = device_list;
device_list = device;
memcpy(&device->opts, &default_device, sizeof(struct device_opts));
- device->opts.name = strdup(default_device.name);
+ device->opts.name = g_strdup(default_device.name);
return &device->opts;
}
@@ -97,11 +97,10 @@ static void free_device_opts(void)
}
for (device = device_list; device; device = next) {
- free(device->ref);
- if (device->opts.name)
- free(device->opts.name);
+ g_free(device->ref);
+ g_free(device->opts.name);
next = device->next;
- free(device);
+ g_free(device);
}
device_list = NULL;
@@ -508,14 +507,13 @@ static void init_all_devices(int ctl)
struct hci_dev_req *dr;
int i;
- dl = malloc(HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t));
+ dl = g_try_malloc0(HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t));
if (!dl) {
info("Can't allocate devlist buffer: %s (%d)",
strerror(errno), errno);
exit(1);
}
- memset(dl, 0, HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t));
dl->dev_num = HCI_MAX_DEV;
dr = dl->dev_req;
@@ -534,7 +532,7 @@ static void init_all_devices(int ctl)
}
}
- free(dl);
+ g_free(dl);
}
static void init_defaults(void)
diff --git a/hcid/security.c b/hcid/security.c
index e14b98e9..cf46674c 100644
--- a/hcid/security.c
+++ b/hcid/security.c
@@ -68,18 +68,9 @@ struct hci_req_data *hci_req_data_new(int dev_id, const bdaddr_t *dba, uint16_t
{
struct hci_req_data *data;
- data = malloc(sizeof(*data));
- if (!data)
- return NULL;
-
- memset(data, 0, sizeof(*data));
-
- data->cparam = malloc(clen);
- if (!data->cparam) {
- free(data);
- return NULL;
- }
+ data = g_new0(struct hci_req_data, 1);
+ data->cparam = g_malloc(clen);
memcpy(data->cparam, cparam, clen);
bacpy(&data->dba, dba);
@@ -121,8 +112,8 @@ static void hci_req_queue_process(int dev_id)
ret_val = hci_send_cmd(dd, data->ogf, data->ocf, data->clen, data->cparam);
if (ret_val < 0) {
hci_req_queue = g_slist_remove(hci_req_queue, data);
- free(data->cparam);
- free(data);
+ g_free(data->cparam);
+ g_free(data);
}
} while(ret_val < 0);
@@ -159,8 +150,8 @@ void hci_req_queue_remove(int dev_id, bdaddr_t *dba)
continue;
hci_req_queue = g_slist_remove(hci_req_queue, req);
- free(req->cparam);
- free(req);
+ g_free(req->cparam);
+ g_free(req);
}
}
@@ -187,8 +178,8 @@ static void check_pending_hci_req(int dev_id, int event)
/* remove the confirmed cmd */
hci_req_queue = g_slist_remove(hci_req_queue, data);
- free(data->cparam);
- free(data);
+ g_free(data->cparam);
+ g_free(data);
}
hci_req_queue_process(dev_id);
@@ -201,11 +192,7 @@ static inline int get_bdaddr(int dev, bdaddr_t *sba, uint16_t handle, bdaddr_t *
char addr[18];
int i;
- cl = malloc(10 * sizeof(*ci) + sizeof(*cl));
- if (!cl)
- return -ENOMEM;
-
- memset(cl, 0, 10 * sizeof(*ci) + sizeof(*cl));
+ cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
ba2str(sba, addr);
cl->dev_id = hci_devid(addr);
@@ -213,18 +200,18 @@ static inline int get_bdaddr(int dev, bdaddr_t *sba, uint16_t handle, bdaddr_t *
ci = cl->conn_info;
if (ioctl(dev, HCIGETCONNLIST, (void *) cl) < 0) {
- free(cl);
+ g_free(cl);
return -EIO;
}
for (i = 0; i < cl->conn_num; i++, ci++)
if (ci->handle == handle) {
bacpy(dba, &ci->bdaddr);
- free(cl);
+ g_free(cl);
return 0;
}
- free(cl);
+ g_free(cl);
return -ENOENT;
}
@@ -346,11 +333,7 @@ static void pin_code_request(int dev, bdaddr_t *sba, bdaddr_t *dba)
ba2str(sba, sa); ba2str(dba, da);
info("pin_code_request (sba=%s, dba=%s)", sa, da);
- cr = malloc(sizeof(*cr) + sizeof(*ci));
- if (!cr)
- return;
-
- memset(cr, 0, sizeof(*cr) + sizeof(*ci));
+ cr = g_malloc0(sizeof(*cr) + sizeof(*ci));
bacpy(&cr->bdaddr, dba);
cr->type = ACL_LINK;
@@ -406,12 +389,12 @@ static void pin_code_request(int dev, bdaddr_t *sba, bdaddr_t *dba)
hcid_dbus_pending_pin_req_add(sba, &ci->bdaddr);
- free(cr);
+ g_free(cr);
return;
reject:
- free(cr);
+ g_free(cr);
hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
@@ -839,19 +822,12 @@ void start_security_manager(int hdev)
return;
}
- di = malloc(sizeof(*di));
- if (!di) {
- error("Can't allocate device info buffer: %s (%d)",
- strerror(errno), errno);
- close(dev);
- return;
- }
-
+ di = g_new(struct hci_dev_info, 1);
if (hci_devinfo(hdev, di) < 0) {
error("Can't get device info: %s (%d)",
strerror(errno), errno);
close(dev);
- free(di);
+ g_free(di);
return;
}
@@ -859,7 +835,7 @@ void start_security_manager(int hdev)
g_io_channel_set_close_on_unref(chan, TRUE);
io_data[hdev].watch_id = g_io_add_watch_full(chan, G_PRIORITY_HIGH,
G_IO_IN | G_IO_NVAL | G_IO_HUP | G_IO_ERR,
- io_security_event, di, (GDestroyNotify)free);
+ io_security_event, di, (GDestroyNotify) g_free);
io_data[hdev].channel = chan;
io_data[hdev].pin_length = -1;