Skip to content
  • Thomas Haller's avatar
    all: use nm_clear_pointer() instead of g_clear_pointer() · 52dbab7d
    Thomas Haller authored
    g_clear_pointer() would always cast the destroy notify function
    pointer to GDestroyNotify. That means, it lost some type safety, like
    
       GPtrArray *ptr_arr = ...
    
       g_clear_pointer (&ptr_arr, g_array_unref);
    
    Since glib 2.58 ([1]), g_clear_pointer() is also more type safe. But
    this is not used by NetworkManager, because we don't set
    GLIB_VERSION_MIN_REQUIRED to 2.58.
    
    [1] https://gitlab.gnome.org/GNOME/glib/-/commit/f9a9902aac826ab4aecc25f6eb533a418a4fa559
    
    We have nm_clear_pointer() to avoid this issue for a long time (pre
    1.12.0). Possibly we should redefine in our source tree g_clear_pointer()
    as nm_clear_pointer(). However, I don't like to patch glib functions
    with our own variant. Arguably, we do patch g_clear_error() in
    such a manner. But there the point is to make the function inlinable.
    
    Also, nm_clear_pointer() returns a boolean that indicates whether
    anything was cleared. That is sometimes useful. I think we should
    just consistently use nm_clear_pointer() instead, which does always
    the preferable thing.
    
    Replace:
    
       sed 's/\<g_clear_pointer *(\([^;]*\), *\([a-z_A-Z0-9]\+\) *)/nm_clear_pointer (\1, \2)/g' $(git grep -l g_clear_pointer) -i
    52dbab7d