* [PATCH 00/24] [RFC] Don't rely on undefined behavior when casting function pointers
@ 2016-04-22 13:10 John Ernberg
2016-04-22 13:10 ` [PATCH 01/24] atmodem: don't " John Ernberg
2016-04-22 20:42 ` [PATCH 00/24] [RFC] Don't " Denis Kenzior
0 siblings, 2 replies; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 3476 bytes --]
From: John Ernberg <john.ernberg@actia.se>
Casting between incompatible function pointer types is undefined.
While it works fine on x86, it's not a good idea to depend on this.
This RFC uses g_slist_free_full where possible, and when it's not works around
the casting using other means such as wrappers or fixing function parameters.
John Ernberg (24):
atmodem: don't rely on undefined behavior when casting function
pointers
hfpmodem: don't rely on undefined behavior when casting function
pointers
ifxmodem: don't rely on undefined behavior when casting function
pointers
ril: don't rely on undefined behavior when casting function pointers
stemodem: don't rely on undefined behavior when casting function
pointers
gatchat: don't rely on undefined behavior when casting function
pointers
bluez4: don't rely on undefined behavior when casting function
pointers
sm: don't rely on undefined behavior when casting function pointers
cbs: don't rely on undefined behavior when casting function pointers
cdma/sms: don't rely on undefined behavior when casting function
pointers
handsfree: don't rely on undefined behavior when casting function
pointers
modem: don't rely on undefined behavior when casting function pointers
network: don't rely on undefined behavior when casting function
pointers
phonebook: don't rely on undefined behavior when casting function
pointers
sim: don't rely on undefined behavior when casting function pointers
simfs: don't rely on undefined behavior when casting function pointers
simutil: don't rely on undefined behavior when casting function
pointers
sms: don't rely on undefined behavior when casting function pointers
smsutil: don't rely on undefined behavior when casting function
pointers
stk: don't rely on undefined behavior when casting function pointers
stkutil: don't rely on undefined behavior when casting function
pointers
ussd: don't rely on undefined behavior when casting function pointers
voicecall: don't rely on undefined behavior when casting function
pointers
unittest: don't rely on undefined behavior when casting function
pointers
drivers/atmodem/voicecall.c | 6 ++----
drivers/hfpmodem/voicecall.c | 6 ++----
drivers/ifxmodem/voicecall.c | 3 +--
drivers/rilmodem/voicecall.c | 6 ++----
drivers/stemodem/voicecall.c | 3 +--
gatchat/gatchat.c | 13 +++++--------
plugins/bluez4.c | 7 +++----
plugins/smart-messaging.c | 6 ++----
src/cbs.c | 27 +++++++++------------------
src/cdma-smsutil.c | 3 +--
src/handsfree.c | 3 +--
src/modem.c | 6 ++----
src/network.c | 3 +--
src/phonebook.c | 24 ++++++++++++++----------
src/sim.c | 29 ++++++++++-------------------
src/simfs.c | 6 +++---
src/simutil.c | 6 ++----
src/sms.c | 9 +++------
src/smsutil.c | 21 +++++++--------------
src/stk.c | 10 +++++++---
src/stkutil.c | 39 ++++++++++++---------------------------
src/ussd.c | 10 +++++-----
src/voicecall.c | 7 ++-----
unit/test-sms.c | 21 +++++++--------------
24 files changed, 104 insertions(+), 170 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH 01/24] atmodem: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 [PATCH 00/24] [RFC] Don't rely on undefined behavior when casting function pointers John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 02/24] hfpmodem: " John Ernberg
2016-04-22 20:42 ` [PATCH 00/24] [RFC] Don't " Denis Kenzior
1 sibling, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 904 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
drivers/atmodem/voicecall.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/atmodem/voicecall.c b/drivers/atmodem/voicecall.c
index 7d823a2..e4c59c2 100644
--- a/drivers/atmodem/voicecall.c
+++ b/drivers/atmodem/voicecall.c
@@ -253,8 +253,7 @@ static void clcc_poll_cb(gboolean ok, GAtResult *result, gpointer user_data)
}
}
- g_slist_foreach(vd->calls, (GFunc) g_free, NULL);
- g_slist_free(vd->calls);
+ g_slist_free_full(vd->calls, g_free);
vd->calls = calls;
@@ -1147,8 +1146,7 @@ static void at_voicecall_remove(struct ofono_voicecall *vc)
if (vd->vts_source)
g_source_remove(vd->vts_source);
- g_slist_foreach(vd->calls, (GFunc) g_free, NULL);
- g_slist_free(vd->calls);
+ g_slist_free_full(vd->calls, g_free);
ofono_voicecall_set_data(vc, NULL);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 02/24] hfpmodem: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 01/24] atmodem: don't " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 03/24] ifxmodem: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 968 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
drivers/hfpmodem/voicecall.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/hfpmodem/voicecall.c b/drivers/hfpmodem/voicecall.c
index f8db584..ffdf4b7 100644
--- a/drivers/hfpmodem/voicecall.c
+++ b/drivers/hfpmodem/voicecall.c
@@ -286,8 +286,7 @@ static void clcc_poll_cb(gboolean ok, GAtResult *result, gpointer user_data)
ofono_voicecall_mpty_hint(vc, mpty_ids);
- g_slist_foreach(vd->calls, (GFunc) g_free, NULL);
- g_slist_free(vd->calls);
+ g_slist_free_full(vd->calls, g_free);
vd->calls = calls;
@@ -1256,8 +1255,7 @@ static void hfp_voicecall_remove(struct ofono_voicecall *vc)
if (vd->expect_release_source)
g_source_remove(vd->expect_release_source);
- g_slist_foreach(vd->calls, (GFunc) g_free, NULL);
- g_slist_free(vd->calls);
+ g_slist_free_full(vd->calls, g_free);
ofono_voicecall_set_data(vc, NULL);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 03/24] ifxmodem: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 02/24] hfpmodem: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 04/24] ril: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 638 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
drivers/ifxmodem/voicecall.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/ifxmodem/voicecall.c b/drivers/ifxmodem/voicecall.c
index 7c27642..45b5ca4 100644
--- a/drivers/ifxmodem/voicecall.c
+++ b/drivers/ifxmodem/voicecall.c
@@ -1009,8 +1009,7 @@ static void ifx_voicecall_remove(struct ofono_voicecall *vc)
{
struct voicecall_data *vd = ofono_voicecall_get_data(vc);
- g_slist_foreach(vd->calls, (GFunc) g_free, NULL);
- g_slist_free(vd->calls);
+ g_slist_free_full(vd->calls, g_free);
g_strfreev(vd->en_list);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 04/24] ril: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 03/24] ifxmodem: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 05/24] stemodem: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 859 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
drivers/rilmodem/voicecall.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/rilmodem/voicecall.c b/drivers/rilmodem/voicecall.c
index 8515ebb..b7180b9 100644
--- a/drivers/rilmodem/voicecall.c
+++ b/drivers/rilmodem/voicecall.c
@@ -302,8 +302,7 @@ no_calls:
}
}
- g_slist_foreach(vd->calls, (GFunc) g_free, NULL);
- g_slist_free(vd->calls);
+ g_slist_free_full(vd->calls, g_free);
vd->calls = calls;
vd->local_release = 0;
@@ -848,8 +847,7 @@ void ril_voicecall_remove(struct ofono_voicecall *vc)
if (vd->clcc_source)
g_source_remove(vd->clcc_source);
- g_slist_foreach(vd->calls, (GFunc) g_free, NULL);
- g_slist_free(vd->calls);
+ g_slist_free_full(vd->calls, g_free);
ofono_voicecall_set_data(vc, NULL);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 06/24] gatchat: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 05/24] stemodem: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 07/24] bluez4: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1697 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
gatchat/gatchat.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/gatchat/gatchat.c b/gatchat/gatchat.c
index d7d0060..3f290ac 100644
--- a/gatchat/gatchat.c
+++ b/gatchat/gatchat.c
@@ -305,8 +305,9 @@ static void at_command_destroy(struct at_command *cmd)
g_free(cmd);
}
-static void free_terminator(struct terminator_info *info)
+static void free_terminator(gpointer pointer)
{
+ struct terminator_info *info = pointer;
g_free(info->terminator);
info->terminator = NULL;
g_free(info);
@@ -325,8 +326,7 @@ static void chat_cleanup(struct at_chat *chat)
chat->command_queue = NULL;
/* Cleanup any response lines we have pending */
- g_slist_foreach(chat->response_lines, (GFunc)g_free, NULL);
- g_slist_free(chat->response_lines);
+ g_slist_free_full(chat->response_lines, g_free);
chat->response_lines = NULL;
/* Cleanup registered notifications */
@@ -357,9 +357,7 @@ static void chat_cleanup(struct at_chat *chat)
chat->syntax = NULL;
if (chat->terminator_list) {
- g_slist_foreach(chat->terminator_list,
- (GFunc)free_terminator, NULL);
- g_slist_free(chat->terminator_list);
+ g_slist_free_full(chat->terminator_list, free_terminator);
chat->terminator_list = NULL;
}
}
@@ -461,8 +459,7 @@ static void at_chat_finish_command(struct at_chat *p, gboolean ok, char *final)
cmd->callback(ok, &result, cmd->user_data);
}
- g_slist_foreach(response_lines, (GFunc)g_free, NULL);
- g_slist_free(response_lines);
+ g_slist_free_full(response_lines, g_free);
g_free(final);
at_command_destroy(cmd);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 07/24] bluez4: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 06/24] gatchat: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 08/24] sm: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1219 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
plugins/bluez4.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/plugins/bluez4.c b/plugins/bluez4.c
index 6a29d9f..0558da3 100644
--- a/plugins/bluez4.c
+++ b/plugins/bluez4.c
@@ -225,8 +225,7 @@ void bluetooth_parse_properties(DBusMessage *reply, const char *property, ...)
}
done:
- g_slist_foreach(prop_handlers, (GFunc) g_free, NULL);
- g_slist_free(prop_handlers);
+ g_slist_free_full(prop_handlers, g_free);
}
static void parse_uuids(DBusMessageIter *array, gpointer user_data)
@@ -692,7 +691,7 @@ static void find_adapter_cb(DBusPendingCall *call, gpointer user_data)
adapter_any_path = g_strdup(path);
- g_slist_foreach(server_list, (GFunc) add_record, NULL);
+ g_slist_foreach(server_list, add_record, NULL);
done:
dbus_message_unref(reply);
@@ -820,7 +819,7 @@ static void bluetooth_disconnect(DBusConnection *conn, void *user_data)
g_hash_table_foreach(uuid_hash, bluetooth_remove, NULL);
- g_slist_foreach(server_list, (GFunc) remove_service_handle, NULL);
+ g_slist_foreach(server_list, remove_service_handle, NULL);
}
static guint bluetooth_watch;
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 05/24] stemodem: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 04/24] ril: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 06/24] gatchat: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 647 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
drivers/stemodem/voicecall.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/stemodem/voicecall.c b/drivers/stemodem/voicecall.c
index 1cbf51a..356ab7c 100644
--- a/drivers/stemodem/voicecall.c
+++ b/drivers/stemodem/voicecall.c
@@ -574,8 +574,7 @@ static void ste_voicecall_remove(struct ofono_voicecall *vc)
{
struct voicecall_data *vd = ofono_voicecall_get_data(vc);
- g_slist_foreach(vd->calls, (GFunc) g_free, NULL);
- g_slist_free(vd->calls);
+ g_slist_free_full(vd->calls, g_free);
ofono_voicecall_set_data(vc, NULL);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 08/24] sm: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 07/24] bluez4: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 09/24] cbs: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1042 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
plugins/smart-messaging.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/plugins/smart-messaging.c b/plugins/smart-messaging.c
index b368917..bbbdaa9 100644
--- a/plugins/smart-messaging.c
+++ b/plugins/smart-messaging.c
@@ -216,8 +216,7 @@ static DBusMessage *smart_messaging_send_vcard(DBusConnection *conn,
err = __ofono_sms_txq_submit(sm->sms, msg_list, flags, &uuid,
message_queued, msg);
- g_slist_foreach(msg_list, (GFunc)g_free, NULL);
- g_slist_free(msg_list);
+ g_slist_free_full(msg_list, g_free);
if (err < 0)
return __ofono_error_failed(msg);
@@ -259,8 +258,7 @@ static DBusMessage *smart_messaging_send_vcal(DBusConnection *conn,
err = __ofono_sms_txq_submit(sm->sms, msg_list, flags, &uuid,
message_queued, msg);
- g_slist_foreach(msg_list, (GFunc)g_free, NULL);
- g_slist_free(msg_list);
+ g_slist_free_full(msg_list, g_free);
if (err < 0)
return __ofono_error_failed(msg);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 09/24] cbs: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 08/24] sm: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 10/24] cdma/sms: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 3013 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/cbs.c | 27 +++++++++------------------
1 file changed, 9 insertions(+), 18 deletions(-)
diff --git a/src/cbs.c b/src/cbs.c
index fdc44a1..8e3296b 100644
--- a/src/cbs.c
+++ b/src/cbs.c
@@ -272,8 +272,7 @@ void ofono_cbs_notify(struct ofono_cbs *cbs, const unsigned char *pdu,
out:
g_free(message);
- g_slist_foreach(cbs_list, (GFunc)g_free, NULL);
- g_slist_free(cbs_list);
+ g_slist_free_full(cbs_list, g_free);
}
static DBusMessage *cbs_get_properties(DBusConnection *conn,
@@ -337,8 +336,7 @@ static void cbs_set_topics_cb(const struct ofono_error *error, void *data)
char *topics;
if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
- g_slist_foreach(cbs->new_topics, (GFunc)g_free, NULL);
- g_slist_free(cbs->new_topics);
+ g_slist_free_full(cbs->new_topics, g_free);
cbs->new_topics = NULL;
DBG("Setting Cell Broadcast topics failed");
@@ -347,8 +345,7 @@ static void cbs_set_topics_cb(const struct ofono_error *error, void *data)
return;
}
- g_slist_foreach(cbs->topics, (GFunc)g_free, NULL);
- g_slist_free(cbs->topics);
+ g_slist_free_full(cbs->topics, g_free);
cbs->topics = cbs->new_topics;
cbs->new_topics = NULL;
@@ -590,21 +587,18 @@ static void cbs_unregister(struct ofono_atom *atom)
ofono_modem_remove_interface(modem, OFONO_CELL_BROADCAST_INTERFACE);
if (cbs->topics) {
- g_slist_foreach(cbs->topics, (GFunc) g_free, NULL);
- g_slist_free(cbs->topics);
+ g_slist_free_full(cbs->topics, g_free);
cbs->topics = NULL;
}
if (cbs->new_topics) {
- g_slist_foreach(cbs->new_topics, (GFunc) g_free, NULL);
- g_slist_free(cbs->new_topics);
+ g_slist_free_full(cbs->new_topics, g_free);
cbs->new_topics = NULL;
}
if (cbs->efcbmid_length) {
cbs->efcbmid_length = 0;
- g_slist_foreach(cbs->efcbmid_contents, (GFunc) g_free, NULL);
- g_slist_free(cbs->efcbmid_contents);
+ g_slist_free_full(cbs->efcbmid_contents, g_free);
cbs->efcbmid_contents = NULL;
}
@@ -729,15 +723,13 @@ static void cbs_got_file_contents(struct ofono_cbs *cbs)
if (cbs->efcbmi_length) {
cbs->efcbmi_length = 0;
- g_slist_foreach(cbs->efcbmi_contents, (GFunc) g_free, NULL);
- g_slist_free(cbs->efcbmi_contents);
+ g_slist_free_full(cbs->efcbmi_contents, g_free);
cbs->efcbmi_contents = NULL;
}
if (cbs->efcbmir_length) {
cbs->efcbmir_length = 0;
- g_slist_foreach(cbs->efcbmir_contents, (GFunc) g_free, NULL);
- g_slist_free(cbs->efcbmir_contents);
+ g_slist_free_full(cbs->efcbmir_contents, g_free);
cbs->efcbmir_contents = NULL;
}
@@ -907,8 +899,7 @@ static void cbs_efcbmid_changed(int id, void *userdata)
if (cbs->efcbmid_length) {
cbs->efcbmid_length = 0;
- g_slist_foreach(cbs->efcbmid_contents, (GFunc) g_free, NULL);
- g_slist_free(cbs->efcbmid_contents);
+ g_slist_free_full(cbs->efcbmid_contents, g_free);
cbs->efcbmid_contents = NULL;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 10/24] cdma/sms: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 09/24] cbs: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 11/24] handsfree: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 539 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/cdma-smsutil.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/cdma-smsutil.c b/src/cdma-smsutil.c
index e36f2e3..35b77e0 100644
--- a/src/cdma-smsutil.c
+++ b/src/cdma-smsutil.c
@@ -533,8 +533,7 @@ static gboolean decode_subparams(struct simple_iter *iter, guint32 *bitmap,
}
}
- g_slist_foreach(entries, (GFunc) g_free, NULL);
- g_slist_free(entries);
+ g_slist_free_full(entries, g_free);
return decode_result;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 11/24] handsfree: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 10/24] cdma/sms: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 12/24] modem: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 670 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/handsfree.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/handsfree.c b/src/handsfree.c
index 31b9d7d..3b518fd 100644
--- a/src/handsfree.c
+++ b/src/handsfree.c
@@ -687,8 +687,7 @@ static void handsfree_unregister(struct ofono_atom *atom)
__ofono_dbus_pending_reply(&hf->pending, reply);
}
- g_slist_foreach(hf->subscriber_numbers, (GFunc) g_free, NULL);
- g_slist_free(hf->subscriber_numbers);
+ g_slist_free_full(hf->subscriber_numbers, g_free);
hf->subscriber_numbers = NULL;
ofono_modem_remove_interface(modem, OFONO_HANDSFREE_INTERFACE);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 12/24] modem: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 11/24] handsfree: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 13/24] network: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 794 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/modem.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/modem.c b/src/modem.c
index a89fa48..b1e8d3e 100644
--- a/src/modem.c
+++ b/src/modem.c
@@ -2083,12 +2083,10 @@ static void modem_unregister(struct ofono_modem *modem)
modem->sim_watch = 0;
modem->sim_ready_watch = 0;
- g_slist_foreach(modem->interface_list, (GFunc) g_free, NULL);
- g_slist_free(modem->interface_list);
+ g_slist_free_full(modem->interface_list, g_free);
modem->interface_list = NULL;
- g_slist_foreach(modem->feature_list, (GFunc) g_free, NULL);
- g_slist_free(modem->feature_list);
+ g_slist_free_full(modem->feature_list, g_free);
modem->feature_list = NULL;
if (modem->timeout) {
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 13/24] network: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 12/24] modem: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 14/24] phonebook: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 532 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/network.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/network.c b/src/network.c
index 8ad11d3..a3d41a7 100644
--- a/src/network.c
+++ b/src/network.c
@@ -746,8 +746,7 @@ static gboolean update_operator_list(struct ofono_netreg *netreg, int total,
}
}
- g_slist_foreach(compressed, (GFunc)g_free, NULL);
- g_slist_free(compressed);
+ g_slist_free_full(compressed, g_free);
if (n)
n = g_slist_reverse(n);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 14/24] phonebook: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 13/24] network: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 15/24] sim: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 2665 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/phonebook.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/src/phonebook.c b/src/phonebook.c
index 531b5a6..07bfcae 100644
--- a/src/phonebook.c
+++ b/src/phonebook.c
@@ -233,23 +233,28 @@ static void vcard_printf_end(GString *vcards)
vcard_printf(vcards, "");
}
-static void print_number(struct phonebook_number *pn, GString *vcards)
+static void print_number(gpointer pointer, gpointer user_data)
{
+ struct phonebook_number *pn = pointer;
+ GString *vcards = user_data;
vcard_printf_number(vcards, pn->number, pn->type, pn->category);
}
-static void destroy_number(struct phonebook_number *pn)
+static void destroy_number(gpointer pointer)
{
+ struct phonebook_number *pn = pointer;
g_free(pn->number);
g_free(pn);
}
-static void print_merged_entry(struct phonebook_person *person, GString *vcards)
+static void print_merged_entry(gpointer pointer, gpointer user_data)
{
+ struct phonebook_person *person = pointer;
+ GString *vcards = user_data;
vcard_printf_begin(vcards);
vcard_printf_text(vcards, person->text);
- g_slist_foreach(person->number_list, (GFunc) print_number, vcards);
+ g_slist_foreach(person->number_list, print_number, vcards);
vcard_printf_group(vcards, person->group);
vcard_printf_email(vcards, person->email);
@@ -257,15 +262,15 @@ static void print_merged_entry(struct phonebook_person *person, GString *vcards)
vcard_printf_end(vcards);
}
-static void destroy_merged_entry(struct phonebook_person *person)
+static void destroy_merged_entry(gpointer pointer)
{
+ struct phonebook_person *person = pointer;
g_free(person->text);
g_free(person->group);
g_free(person->email);
g_free(person->sip_uri);
- g_slist_foreach(person->number_list, (GFunc) destroy_number, NULL);
- g_slist_free(person->number_list);
+ g_slist_free_full(person->number_list, destroy_number);
g_free(person);
}
@@ -419,10 +424,9 @@ static void export_phonebook_cb(const struct ofono_error *error, void *data)
/* convert the collected entries that are already merged to vcard */
phonebook->merge_list = g_slist_reverse(phonebook->merge_list);
- g_slist_foreach(phonebook->merge_list, (GFunc) print_merged_entry,
+ g_slist_foreach(phonebook->merge_list, print_merged_entry,
phonebook->vcards);
- g_slist_foreach(phonebook->merge_list, (GFunc) destroy_merged_entry,
- NULL);
+ g_slist_free_full(phonebook->merge_list, destroy_merged_entry);
g_slist_free(phonebook->merge_list);
phonebook->merge_list = NULL;
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 15/24] sim: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 14/24] phonebook: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 16/24] simfs: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 2839 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/sim.c | 29 ++++++++++-------------------
1 file changed, 10 insertions(+), 19 deletions(-)
diff --git a/src/sim.c b/src/sim.c
index bcf5afd..94d8840 100644
--- a/src/sim.c
+++ b/src/sim.c
@@ -321,8 +321,9 @@ static char **get_service_numbers(GSList *service_numbers)
return ret;
}
-static void service_number_free(struct service_number *num)
+static void service_number_free(gpointer pointer)
{
+ struct service_number *num = pointer;
g_free(num->id);
g_free(num);
}
@@ -615,8 +616,7 @@ static DBusMessage *sim_set_property(DBusConnection *conn, DBusMessage *msg,
set_ok = set_own_numbers(sim, own_numbers, msg);
error:
- g_slist_foreach(own_numbers, (GFunc) g_free, 0);
- g_slist_free(own_numbers);
+ g_slist_free_full(own_numbers, g_free);
if (set_ok)
return NULL;
@@ -1195,8 +1195,7 @@ check:
char **own_numbers;
DBusConnection *conn = ofono_dbus_get_connection();
- g_slist_foreach(sim->own_numbers, (GFunc) g_free, NULL);
- g_slist_free(sim->own_numbers);
+ g_slist_free_full(sim->own_numbers, g_free);
sim->own_numbers = sim->new_numbers;
own_numbers = get_own_numbers(sim->own_numbers);
@@ -1208,8 +1207,7 @@ check:
g_strfreev(own_numbers);
} else {
- g_slist_foreach(sim->new_numbers, (GFunc) g_free, NULL);
- g_slist_free(sim->new_numbers);
+ g_slist_free_full(sim->new_numbers, g_free);
}
sim->new_numbers = NULL;
@@ -1302,9 +1300,7 @@ static void sim_service_numbers_changed(int id, void *userdata)
struct ofono_sim *sim = userdata;
if (sim->service_numbers) {
- g_slist_foreach(sim->service_numbers,
- (GFunc)service_number_free, NULL);
- g_slist_free(sim->service_numbers);
+ g_slist_free_full(sim->service_numbers, service_number_free);
sim->service_numbers = NULL;
}
@@ -2025,13 +2021,11 @@ skip_efpl:
}
if (efli) {
- g_slist_foreach(efli, (GFunc)g_free, NULL);
- g_slist_free(efli);
+ g_slist_free_full(efli, g_free);
}
if (efpl) {
- g_slist_foreach(efpl, (GFunc)g_free, NULL);
- g_slist_free(efpl);
+ g_slist_free_full(efpl, g_free);
}
if (sim->language_prefs != NULL)
@@ -2394,15 +2388,12 @@ static void sim_free_main_state(struct ofono_sim *sim)
sim->mnc[0] = '\0';
if (sim->own_numbers) {
- g_slist_foreach(sim->own_numbers, (GFunc)g_free, NULL);
- g_slist_free(sim->own_numbers);
+ g_slist_free_full(sim->own_numbers, g_free);
sim->own_numbers = NULL;
}
if (sim->service_numbers) {
- g_slist_foreach(sim->service_numbers,
- (GFunc)service_number_free, NULL);
- g_slist_free(sim->service_numbers);
+ g_slist_free_full(sim->service_numbers, service_number_free);
sim->service_numbers = NULL;
sim->sdn_ready = FALSE;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 16/24] simfs: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 15/24] sim: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 17/24] simutil: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 809 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/simfs.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/simfs.c b/src/simfs.c
index 03c8c9e..595dbad 100644
--- a/src/simfs.c
+++ b/src/simfs.c
@@ -74,8 +74,9 @@ struct sim_fs_op {
struct ofono_sim_context *context;
};
-static void sim_fs_op_free(struct sim_fs_op *node)
+static void sim_fs_op_free(gpointer pointer)
{
+ struct sim_fs_op *node = pointer;
g_free(node->buffer);
g_free(node);
}
@@ -105,8 +106,7 @@ void sim_fs_free(struct sim_fs *fs)
* for operations still in progress
*/
if (fs->op_q) {
- g_queue_foreach(fs->op_q, (GFunc) sim_fs_op_free, NULL);
- g_queue_free(fs->op_q);
+ g_queue_free_full(fs->op_q, sim_fs_op_free);
fs->op_q = NULL;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 17/24] simutil: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 16/24] simfs: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 18/24] sms: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 779 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/simutil.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/simutil.c b/src/simutil.c
index 5f8c8b8..4731d3b 100644
--- a/src/simutil.c
+++ b/src/simutil.c
@@ -980,8 +980,7 @@ void sim_spdi_free(struct sim_spdi *spdi)
if (spdi == NULL)
return;
- g_slist_foreach(spdi->operators, (GFunc)g_free, NULL);
- g_slist_free(spdi->operators);
+ g_slist_free_full(spdi->operators, g_free);
g_free(spdi);
}
@@ -1088,8 +1087,7 @@ void sim_eons_free(struct sim_eons *eons)
g_free(eons->pnn_list);
- g_slist_foreach(eons->opl_list, (GFunc)g_free, NULL);
- g_slist_free(eons->opl_list);
+ g_slist_free_full(eons->opl_list, g_free);
g_free(eons);
}
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 18/24] sms: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 17/24] simutil: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 19/24] smsutil: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1236 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/sms.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/src/sms.c b/src/sms.c
index 72972b2..17c5a9c 100644
--- a/src/sms.c
+++ b/src/sms.c
@@ -988,8 +988,7 @@ static DBusMessage *sms_send_message(DBusConnection *conn, DBusMessage *msg,
err = __ofono_sms_txq_submit(sms, msg_list, flags, &uuid,
message_queued, msg);
- g_slist_foreach(msg_list, (GFunc) g_free, NULL);
- g_slist_free(msg_list);
+ g_slist_free_full(msg_list, g_free);
if (err < 0)
return __ofono_error_failed(msg);
@@ -1425,8 +1424,7 @@ static void handle_deliver(struct ofono_sms *sms, const struct sms *incoming)
return;
sms_dispatch(sms, sms_list);
- g_slist_foreach(sms_list, (GFunc) g_free, NULL);
- g_slist_free(sms_list);
+ g_slist_free_full(sms_list, g_free);
return;
}
@@ -1946,8 +1944,7 @@ static void sms_restore_tx_queue(struct ofono_sms *sms)
g_queue_push_tail(sms->txq, txq_entry);
loop_out:
- g_slist_foreach(backup_entry->msg_list, (GFunc)g_free, NULL);
- g_slist_free(backup_entry->msg_list);
+ g_slist_free_full(backup_entry->msg_list, g_free);
g_free(backup_entry);
}
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 19/24] smsutil: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 18/24] sms: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 20/24] stk: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 2377 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/smsutil.c | 21 +++++++--------------
1 file changed, 7 insertions(+), 14 deletions(-)
diff --git a/src/smsutil.c b/src/smsutil.c
index 19e2016..b6f7348 100644
--- a/src/smsutil.c
+++ b/src/smsutil.c
@@ -2541,8 +2541,7 @@ void sms_assembly_free(struct sms_assembly *assembly)
for (l = assembly->assembly_list; l; l = l->next) {
struct sms_assembly_node *node = l->data;
- g_slist_foreach(node->fragment_list, (GFunc) g_free, 0);
- g_slist_free(node->fragment_list);
+ g_slist_free_full(node->fragment_list, g_free);
g_free(node);
}
@@ -2692,8 +2691,7 @@ void sms_assembly_expire(struct sms_assembly *assembly, time_t before)
sms_assembly_backup_free(assembly, node);
- g_slist_foreach(node->fragment_list, (GFunc) g_free, 0);
- g_slist_free(node->fragment_list);
+ g_slist_free_full(node->fragment_list, g_free);
g_free(node);
if (prev)
@@ -3506,8 +3504,7 @@ GSList *sms_datagram_prepare(const char *to,
}
if (left > 0) {
- g_slist_foreach(r, (GFunc) g_free, NULL);
- g_slist_free(r);
+ g_slist_free_full(r, g_free);
return NULL;
} else {
@@ -3698,8 +3695,7 @@ GSList *sms_text_prepare_with_alphabet(const char *to, const char *utf8,
g_free(ucs2_encoded);
if (left > 0) {
- g_slist_foreach(r, (GFunc) g_free, NULL);
- g_slist_free(r);
+ g_slist_free_full(r, g_free);
return NULL;
} else {
@@ -4214,8 +4210,7 @@ void cbs_assembly_free(struct cbs_assembly *assembly)
for (l = assembly->assembly_list; l; l = l->next) {
struct cbs_assembly_node *node = l->data;
- g_slist_foreach(node->pages, (GFunc) g_free, 0);
- g_slist_free(node->pages);
+ g_slist_free_full(node->pages, g_free);
g_free(node);
}
@@ -4294,8 +4289,7 @@ static void cbs_assembly_expire(struct cbs_assembly *assembly,
else
assembly->assembly_list = l->next;
- g_slist_foreach(node->pages, (GFunc) g_free, NULL);
- g_slist_free(node->pages);
+ g_slist_free_full(node->pages, g_free);
g_free(node->pages);
tmp = l;
l = l->next;
@@ -4604,8 +4598,7 @@ GSList *cbs_extract_topic_ranges(const char *ranges)
}
tmp = cbs_optimize_ranges(ret);
- g_slist_foreach(ret, (GFunc) g_free, NULL);
- g_slist_free(ret);
+ g_slist_free_full(ret, g_free);
return tmp;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 20/24] stk: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 19/24] smsutil: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 21/24] stkutil: " John Ernberg
2016-04-22 20:44 ` [PATCH 20/24] stk: " Denis Kenzior
0 siblings, 2 replies; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1207 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/stk.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/stk.c b/src/stk.c
index 01c95b5..16c7152 100644
--- a/src/stk.c
+++ b/src/stk.c
@@ -2315,8 +2315,7 @@ static gboolean handle_command_refresh(const struct stk_command *cmd,
break;
}
- g_slist_foreach(file_list, (GFunc) g_free, NULL);
- g_slist_free(file_list);
+ g_slist_free_full(file_list, g_free);
return FALSE;
}
@@ -3131,6 +3130,11 @@ void ofono_stk_driver_unregister(const struct ofono_stk_driver *d)
g_drivers = g_slist_remove(g_drivers, (void *) d);
}
+static void free_envelope_item(gpointer pointer, gpointer user_data)
+{
+ g_free(pointer);
+}
+
static void stk_unregister(struct ofono_atom *atom)
{
struct ofono_stk *stk = __ofono_atom_get_data(atom);
@@ -3163,7 +3167,7 @@ static void stk_unregister(struct ofono_atom *atom)
stk->main_menu = NULL;
}
- g_queue_foreach(stk->envelope_q, (GFunc) g_free, NULL);
+ g_queue_foreach(stk->envelope_q, free_envelope_item, NULL);
g_queue_free(stk->envelope_q);
ofono_modem_remove_interface(modem, OFONO_STK_INTERFACE);
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 21/24] stkutil: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 20/24] stk: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 22/24] ussd: " John Ernberg
2016-04-22 20:44 ` [PATCH 20/24] stk: " Denis Kenzior
1 sibling, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 4586 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/stkutil.c | 39 ++++++++++++---------------------------
1 file changed, 12 insertions(+), 27 deletions(-)
diff --git a/src/stkutil.c b/src/stkutil.c
index a03e9b7..ec3f825 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -649,8 +649,7 @@ static gboolean parse_dataobj_file_list(struct comprehension_tlv_iter *iter,
return TRUE;
error:
- g_slist_foreach(*fl, (GFunc) g_free, NULL);
- g_slist_free(*fl);
+ g_slist_free_full(*fl, g_free);
return FALSE;
}
@@ -2253,8 +2252,9 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)
}
}
-static void destroy_stk_item(struct stk_item *item)
+static void destroy_stk_item(gpointer pointer)
{
+ struct stk_item *item = pointer;
g_free(item->text);
g_free(item);
}
@@ -2297,8 +2297,7 @@ static gboolean parse_item_list(struct comprehension_tlv_iter *iter,
if (count == 1)
return TRUE;
- g_slist_foreach(list, (GFunc) destroy_stk_item, NULL);
- g_slist_free(list);
+ g_slist_free_full(list, destroy_stk_item);
return FALSE;
}
@@ -2420,8 +2419,7 @@ static enum stk_command_parse_result parse_dataobj(
minimum_set = FALSE;
}
- g_slist_foreach(entries, (GFunc) g_free, NULL);
- g_slist_free(entries);
+ g_slist_free_full(entries, g_free);
if (minimum_set == FALSE)
return STK_PARSE_RESULT_MISSING_VALUE;
@@ -2624,9 +2622,7 @@ static enum stk_command_parse_result parse_poll_interval(
static void destroy_setup_menu(struct stk_command *command)
{
g_free(command->setup_menu.alpha_id);
- g_slist_foreach(command->setup_menu.items,
- (GFunc) destroy_stk_item, NULL);
- g_slist_free(command->setup_menu.items);
+ g_slist_free_full(command->setup_menu.items, destroy_stk_item);
}
static enum stk_command_parse_result parse_setup_menu(
@@ -2671,9 +2667,7 @@ static enum stk_command_parse_result parse_setup_menu(
static void destroy_select_item(struct stk_command *command)
{
g_free(command->select_item.alpha_id);
- g_slist_foreach(command->select_item.items,
- (GFunc) destroy_stk_item, NULL);
- g_slist_free(command->select_item.items);
+ g_slist_free_full(command->select_item.items, destroy_stk_item);
}
static enum stk_command_parse_result parse_select_item(
@@ -2948,8 +2942,7 @@ static enum stk_command_parse_result parse_setup_call(
static void destroy_refresh(struct stk_command *command)
{
- g_slist_foreach(command->refresh.file_list, (GFunc) g_free, NULL);
- g_slist_free(command->refresh.file_list);
+ g_slist_free_full(command->refresh.file_list, g_free);
g_free(command->refresh.alpha_id);
}
@@ -3264,9 +3257,7 @@ static void destroy_launch_browser(struct stk_command *command)
{
g_free(command->launch_browser.url);
g_free(command->launch_browser.bearer.array);
- g_slist_foreach(command->launch_browser.prov_file_refs,
- (GFunc) g_free, NULL);
- g_slist_free(command->launch_browser.prov_file_refs);
+ g_slist_free_full(command->launch_browser.prov_file_refs, g_free);
g_free(command->launch_browser.text_gateway_proxy_id);
g_free(command->launch_browser.alpha_id);
g_free(command->launch_browser.network_name.array);
@@ -3652,9 +3643,7 @@ static enum stk_command_parse_result parse_get_frames_status(
static void destroy_retrieve_mms(struct stk_command *command)
{
g_free(command->retrieve_mms.alpha_id);
- g_slist_foreach(command->retrieve_mms.mms_rec_files,
- (GFunc) g_free, NULL);
- g_slist_free(command->retrieve_mms.mms_rec_files);
+ g_slist_free_full(command->retrieve_mms.mms_rec_files, g_free);
}
static enum stk_command_parse_result parse_retrieve_mms(
@@ -3701,9 +3690,7 @@ static enum stk_command_parse_result parse_retrieve_mms(
static void destroy_submit_mms(struct stk_command *command)
{
g_free(command->submit_mms.alpha_id);
- g_slist_foreach(command->submit_mms.mms_subm_files,
- (GFunc) g_free, NULL);
- g_slist_free(command->submit_mms.mms_subm_files);
+ g_slist_free_full(command->submit_mms.mms_subm_files, g_free);
}
static enum stk_command_parse_result parse_submit_mms(
@@ -3743,9 +3730,7 @@ static enum stk_command_parse_result parse_submit_mms(
static void destroy_display_mms(struct stk_command *command)
{
- g_slist_foreach(command->display_mms.mms_subm_files,
- (GFunc) g_free, NULL);
- g_slist_free(command->display_mms.mms_subm_files);
+ g_slist_free_full(command->display_mms.mms_subm_files, g_free);
}
static enum stk_command_parse_result parse_display_mms(
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 22/24] ussd: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 21/24] stkutil: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 23/24] voicecall: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1225 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/ussd.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/ussd.c b/src/ussd.c
index bc8e0f6..99fa753 100644
--- a/src/ussd.c
+++ b/src/ussd.c
@@ -102,8 +102,10 @@ static struct ssc_entry *ssc_entry_create(const char *sc, void *cb, void *data,
return r;
}
-static void ssc_entry_destroy(struct ssc_entry *ca)
+static void ssc_entry_destroy(gpointer pointer)
{
+ struct ssc_entry *ca = pointer;
+
if (ca->destroy)
ca->destroy(ca->user);
@@ -790,12 +792,10 @@ static void ussd_unregister(struct ofono_atom *atom)
struct ofono_modem *modem = __ofono_atom_get_modem(atom);
const char *path = __ofono_atom_get_path(atom);
- g_slist_foreach(ussd->ss_control_list, (GFunc) ssc_entry_destroy, NULL);
- g_slist_free(ussd->ss_control_list);
+ g_slist_free_full(ussd->ss_control_list, ssc_entry_destroy);
ussd->ss_control_list = NULL;
- g_slist_foreach(ussd->ss_passwd_list, (GFunc) ssc_entry_destroy, NULL);
- g_slist_free(ussd->ss_passwd_list);
+ g_slist_free_full(ussd->ss_passwd_list, ssc_entry_destroy);
ussd->ss_passwd_list = NULL;
ofono_modem_remove_interface(modem,
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 23/24] voicecall: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 22/24] ussd: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
2016-04-22 13:10 ` [PATCH 24/24] unittest: " John Ernberg
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 963 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
src/voicecall.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/src/voicecall.c b/src/voicecall.c
index c9b1b43..027f03e 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -2534,9 +2534,7 @@ static void free_sim_ecc_numbers(struct ofono_voicecall *vc, gboolean old_only)
*/
if (old_only == FALSE) {
if (vc->new_sim_en_list) {
- g_slist_foreach(vc->new_sim_en_list, (GFunc) g_free,
- NULL);
- g_slist_free(vc->new_sim_en_list);
+ g_slist_free_full(vc->new_sim_en_list, g_free);
vc->new_sim_en_list = NULL;
}
@@ -2544,8 +2542,7 @@ static void free_sim_ecc_numbers(struct ofono_voicecall *vc, gboolean old_only)
}
if (vc->sim_en_list) {
- g_slist_foreach(vc->sim_en_list, (GFunc) g_free, NULL);
- g_slist_free(vc->sim_en_list);
+ g_slist_free_full(vc->sim_en_list, g_free);
vc->sim_en_list = NULL;
}
}
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH 24/24] unittest: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 23/24] voicecall: " John Ernberg
@ 2016-04-22 13:10 ` John Ernberg
0 siblings, 0 replies; 29+ messages in thread
From: John Ernberg @ 2016-04-22 13:10 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 2230 bytes --]
From: John Ernberg <john.ernberg@actia.se>
---
unit/test-sms.c | 21 +++++++--------------
1 file changed, 7 insertions(+), 14 deletions(-)
diff --git a/unit/test-sms.c b/unit/test-sms.c
index 259594e..3d0f016 100644
--- a/unit/test-sms.c
+++ b/unit/test-sms.c
@@ -1132,8 +1132,7 @@ static void test_assembly(void)
utf8 = sms_decode_text(l);
- g_slist_foreach(l, (GFunc)g_free, NULL);
- g_slist_free(l);
+ g_slist_free_full(l, g_free);
sms_assembly_free(assembly);
@@ -1214,8 +1213,7 @@ static void test_prepare_7bit(void)
g_assert(strcmp(expected_no_fragmentation_7bit, encoded_pdu) == 0);
g_free(encoded_pdu);
- g_slist_foreach(r, (GFunc)g_free, NULL);
- g_slist_free(r);
+ g_slist_free_full(r, g_free);
}
struct sms_concat_data {
@@ -1273,8 +1271,7 @@ static void test_prepare_concat(gconstpointer data)
pdus = g_slist_append(pdus, strpdu);
}
- g_slist_foreach(r, (GFunc)g_free, NULL);
- g_slist_free(r);
+ g_slist_free_full(r, g_free);
for (l = pdus; l; l = l->next) {
long len;
@@ -1474,16 +1471,14 @@ static void test_cbs_assembly(void)
l = cbs_assembly_add_page(assembly, &dec1);
g_assert(l);
g_assert(g_slist_length(assembly->recv_cell) == 1);
- g_slist_foreach(l, (GFunc)g_free, NULL);
- g_slist_free(l);
+ g_slist_free_full(l, g_free);
/* Can we receive new updates ? */
dec1.update_number = 8;
l = cbs_assembly_add_page(assembly, &dec1);
g_assert(l);
g_assert(g_slist_length(assembly->recv_cell) == 1);
- g_slist_foreach(l, (GFunc)g_free, NULL);
- g_slist_free(l);
+ g_slist_free_full(l, g_free);
/* Do we ignore old pages ? */
l = cbs_assembly_add_page(assembly, &dec1);
@@ -1529,8 +1524,7 @@ static void test_cbs_assembly(void)
g_assert(strcmp(utf8, "BelconnenFraserBelconnen") == 0);
g_free(utf8);
- g_slist_foreach(l, (GFunc)g_free, NULL);
- g_slist_free(l);
+ g_slist_free_full(l, g_free);
cbs_assembly_free(assembly);
}
@@ -1621,8 +1615,7 @@ static void test_range_minimizer(void)
g_print("range: %s\n", rangestr);
g_free(rangestr);
- g_slist_foreach(r, (GFunc)g_free, NULL);
- g_slist_free(r);
+ g_slist_free_full(r, g_free);
}
}
--
1.9.1
^ permalink raw reply related [flat|nested] 29+ messages in thread
* Re: [PATCH 00/24] [RFC] Don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 [PATCH 00/24] [RFC] Don't rely on undefined behavior when casting function pointers John Ernberg
2016-04-22 13:10 ` [PATCH 01/24] atmodem: don't " John Ernberg
@ 2016-04-22 20:42 ` Denis Kenzior
1 sibling, 0 replies; 29+ messages in thread
From: Denis Kenzior @ 2016-04-22 20:42 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 556 bytes --]
Hi John,
On 04/22/2016 08:10 AM, John Ernberg wrote:
> From: John Ernberg <john.ernberg@actia.se>
>
> Casting between incompatible function pointer types is undefined.
> While it works fine on x86, it's not a good idea to depend on this.
>
> This RFC uses g_slist_free_full where possible, and when it's not works around
> the casting using other means such as wrappers or fixing function parameters.
>
I applied all of these except patch 20. See my comments in the relevant
reply.
Thanks for doing all the work.
Regards,
-Denis
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 20/24] stk: don't rely on undefined behavior when casting function pointers
2016-04-22 13:10 ` [PATCH 20/24] stk: " John Ernberg
2016-04-22 13:10 ` [PATCH 21/24] stkutil: " John Ernberg
@ 2016-04-22 20:44 ` Denis Kenzior
2016-04-25 6:38 ` John Ernberg
1 sibling, 1 reply; 29+ messages in thread
From: Denis Kenzior @ 2016-04-22 20:44 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1392 bytes --]
Hi John,
On 04/22/2016 08:10 AM, John Ernberg wrote:
> From: John Ernberg <john.ernberg@actia.se>
>
> ---
> src/stk.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/src/stk.c b/src/stk.c
> index 01c95b5..16c7152 100644
> --- a/src/stk.c
> +++ b/src/stk.c
> @@ -2315,8 +2315,7 @@ static gboolean handle_command_refresh(const struct stk_command *cmd,
> break;
> }
>
> - g_slist_foreach(file_list, (GFunc) g_free, NULL);
> - g_slist_free(file_list);
> + g_slist_free_full(file_list, g_free);
>
> return FALSE;
> }
> @@ -3131,6 +3130,11 @@ void ofono_stk_driver_unregister(const struct ofono_stk_driver *d)
> g_drivers = g_slist_remove(g_drivers, (void *) d);
> }
>
> +static void free_envelope_item(gpointer pointer, gpointer user_data)
> +{
> + g_free(pointer);
> +}
> +
> static void stk_unregister(struct ofono_atom *atom)
> {
> struct ofono_stk *stk = __ofono_atom_get_data(atom);
> @@ -3163,7 +3167,7 @@ static void stk_unregister(struct ofono_atom *atom)
> stk->main_menu = NULL;
> }
>
> - g_queue_foreach(stk->envelope_q, (GFunc) g_free, NULL);
> + g_queue_foreach(stk->envelope_q, free_envelope_item, NULL);
Why not g_queue_free_full?
> g_queue_free(stk->envelope_q);
>
> ofono_modem_remove_interface(modem, OFONO_STK_INTERFACE);
>
Regards,
-Denis
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 20/24] stk: don't rely on undefined behavior when casting function pointers
2016-04-22 20:44 ` [PATCH 20/24] stk: " Denis Kenzior
@ 2016-04-25 6:38 ` John Ernberg
2016-04-25 17:21 ` Denis Kenzior
0 siblings, 1 reply; 29+ messages in thread
From: John Ernberg @ 2016-04-25 6:38 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1818 bytes --]
Hi Dennis,
On 04/22/2016 10:44 PM, Denis Kenzior wrote:
> Hi John,
>
> On 04/22/2016 08:10 AM, John Ernberg wrote:
>> From: John Ernberg <john.ernberg@actia.se>
>>
>> ---
>> src/stk.c | 10 +++++++---
>> 1 file changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/stk.c b/src/stk.c
>> index 01c95b5..16c7152 100644
>> --- a/src/stk.c
>> +++ b/src/stk.c
>> @@ -2315,8 +2315,7 @@ static gboolean handle_command_refresh(const
>> struct stk_command *cmd,
>> break;
>> }
>>
>> - g_slist_foreach(file_list, (GFunc) g_free, NULL);
>> - g_slist_free(file_list);
>> + g_slist_free_full(file_list, g_free);
>>
>> return FALSE;
>> }
>> @@ -3131,6 +3130,11 @@ void ofono_stk_driver_unregister(const struct
>> ofono_stk_driver *d)
>> g_drivers = g_slist_remove(g_drivers, (void *) d);
>> }
>>
>> +static void free_envelope_item(gpointer pointer, gpointer user_data)
>> +{
>> + g_free(pointer);
>> +}
>> +
>> static void stk_unregister(struct ofono_atom *atom)
>> {
>> struct ofono_stk *stk = __ofono_atom_get_data(atom);
>> @@ -3163,7 +3167,7 @@ static void stk_unregister(struct ofono_atom
>> *atom)
>> stk->main_menu = NULL;
>> }
>>
>> - g_queue_foreach(stk->envelope_q, (GFunc) g_free, NULL);
>> + g_queue_foreach(stk->envelope_q, free_envelope_item, NULL);
>
> Why not g_queue_free_full?
It would require a glib required version bump from 2.28 to 2.32, the
solution in the patch is 2.28 friendly. If it's ok to bump glib, I will
redo the patch to use g_queue_free_full instead.
>
>> g_queue_free(stk->envelope_q);
>>
>> ofono_modem_remove_interface(modem, OFONO_STK_INTERFACE);
>>
>
> Regards,
> -Denis
Best regards // John Ernberg
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 20/24] stk: don't rely on undefined behavior when casting function pointers
2016-04-25 6:38 ` John Ernberg
@ 2016-04-25 17:21 ` Denis Kenzior
0 siblings, 0 replies; 29+ messages in thread
From: Denis Kenzior @ 2016-04-25 17:21 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 492 bytes --]
Hi John,
<snip>
>>> - g_queue_foreach(stk->envelope_q, (GFunc) g_free, NULL);
>>> + g_queue_foreach(stk->envelope_q, free_envelope_item, NULL);
>>
>> Why not g_queue_free_full?
> It would require a glib required version bump from 2.28 to 2.32, the
> solution in the patch is 2.28 friendly. If it's ok to bump glib, I will
> redo the patch to use g_queue_free_full instead.
>>
Given than glib 2.32 is over 4 years old, I think it safe to do that.
Regards,
-Denis
^ permalink raw reply [flat|nested] 29+ messages in thread
end of thread, other threads:[~2016-04-25 17:21 UTC | newest]
Thread overview: 29+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-22 13:10 [PATCH 00/24] [RFC] Don't rely on undefined behavior when casting function pointers John Ernberg
2016-04-22 13:10 ` [PATCH 01/24] atmodem: don't " John Ernberg
2016-04-22 13:10 ` [PATCH 02/24] hfpmodem: " John Ernberg
2016-04-22 13:10 ` [PATCH 03/24] ifxmodem: " John Ernberg
2016-04-22 13:10 ` [PATCH 04/24] ril: " John Ernberg
2016-04-22 13:10 ` [PATCH 05/24] stemodem: " John Ernberg
2016-04-22 13:10 ` [PATCH 06/24] gatchat: " John Ernberg
2016-04-22 13:10 ` [PATCH 07/24] bluez4: " John Ernberg
2016-04-22 13:10 ` [PATCH 08/24] sm: " John Ernberg
2016-04-22 13:10 ` [PATCH 09/24] cbs: " John Ernberg
2016-04-22 13:10 ` [PATCH 10/24] cdma/sms: " John Ernberg
2016-04-22 13:10 ` [PATCH 11/24] handsfree: " John Ernberg
2016-04-22 13:10 ` [PATCH 12/24] modem: " John Ernberg
2016-04-22 13:10 ` [PATCH 13/24] network: " John Ernberg
2016-04-22 13:10 ` [PATCH 14/24] phonebook: " John Ernberg
2016-04-22 13:10 ` [PATCH 15/24] sim: " John Ernberg
2016-04-22 13:10 ` [PATCH 16/24] simfs: " John Ernberg
2016-04-22 13:10 ` [PATCH 17/24] simutil: " John Ernberg
2016-04-22 13:10 ` [PATCH 18/24] sms: " John Ernberg
2016-04-22 13:10 ` [PATCH 19/24] smsutil: " John Ernberg
2016-04-22 13:10 ` [PATCH 20/24] stk: " John Ernberg
2016-04-22 13:10 ` [PATCH 21/24] stkutil: " John Ernberg
2016-04-22 13:10 ` [PATCH 22/24] ussd: " John Ernberg
2016-04-22 13:10 ` [PATCH 23/24] voicecall: " John Ernberg
2016-04-22 13:10 ` [PATCH 24/24] unittest: " John Ernberg
2016-04-22 20:44 ` [PATCH 20/24] stk: " Denis Kenzior
2016-04-25 6:38 ` John Ernberg
2016-04-25 17:21 ` Denis Kenzior
2016-04-22 20:42 ` [PATCH 00/24] [RFC] Don't " Denis Kenzior
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.