mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-26 10:00:07 +01:00
In general, it's fine to pass %NULL to g_free().
However, consider:
char *
foo (void)
{
gs_free char *value = NULL;
value = g_strdup ("hi");
return g_steal_pointer (&value);
}
gs_free, gs_local_free(), and g_steal_pointer() are all inlinable.
Here the compiler can easily recognize that we always pass %NULL to
g_free(). But with the previous implementation, the compiler would
not omit the call to g_free().
Similar patterns happen all over the place:
gboolean
baz (void)
{
gs_free char *value = NULL;
if (!some_check ())
return FALSE;
value = get_value ();
if (!value)
return FALSE;
return TRUE;
}
in this example, g_free() is only required after setting @value to
non-NULL.
Note that this does increase the binary side a bit (4k for libnm, 8k
for NetworkManager, with "-O2").
|
||
|---|---|---|
| .. | ||
| c-list-util.c | ||
| c-list-util.h | ||
| nm-c-list.h | ||
| nm-compat.c | ||
| nm-compat.h | ||
| nm-dedup-multi.c | ||
| nm-dedup-multi.h | ||
| nm-enum-utils.c | ||
| nm-enum-utils.h | ||
| nm-glib.h | ||
| nm-hash-utils.c | ||
| nm-hash-utils.h | ||
| nm-io-utils.c | ||
| nm-io-utils.h | ||
| nm-jansson.h | ||
| nm-macros-internal.h | ||
| nm-obj.h | ||
| nm-random-utils.c | ||
| nm-random-utils.h | ||
| nm-secret-utils.c | ||
| nm-secret-utils.h | ||
| nm-shared-utils.c | ||
| nm-shared-utils.h | ||
| nm-test-utils.h | ||
| nm-udev-utils.c | ||
| nm-udev-utils.h | ||
| nm-vpn-editor-plugin-call.h | ||
| nm-vpn-plugin-macros.h | ||
| nm-vpn-plugin-utils.c | ||
| nm-vpn-plugin-utils.h | ||
| unaligned.h | ||