summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-08-31 09:39:53 +0200
committerThomas Haller <thaller@redhat.com>2022-08-31 10:59:22 +0200
commit98c3ac14803ca762f1f7b00b9e8fd5670cf34bab (patch)
treeebdfa2abb522991fb886f233c47a2d9fdfd93efe
parent6b74f3cc1436b95111bdfa1b782b4bb6100ba33a (diff)
downloadNetworkManager-98c3ac14803ca762f1f7b00b9e8fd5670cf34bab.tar.gz
checkpatch.pl: discourage g_str_hash()/g_direct_hash() and g_direct_equal()
- instead of g_str_hash()/g_direct_hash(), use our own functions nm_str_hash()/nm_direct_hash(). Those use siphash24 with a random seed. - don't pass g_direct_equal() to GHashTable. When omitting the equal function, it falls back to direct pointer comparison, which is likely faster. In any case, it's consistent to not use g_direct_hash() when using pointer equality. - instead of g_int_hash()/g_int64_hash()/g_double_hash(), use our nm_pint_hash()/nm_pint64_hash()/nm_pdouble_hash(). The latter two don't exist yet. The reason is that we want to use siphash24. Yes, our name differs from glib's. Our naming seems to make sense to me however, because we also have nm_pstr_hash(), nm_pdirect_hash() and even nm_ppdirect_hash() for following the pointers. Naming is hard. - instead of g_int_equal()/g_int64_equal()/g_double_equal() use our nm_pint_equal()/nm_pint64_equal()/nm_pdouble_equal(). The latter two don't exist yet. The reason is purely naming consistency since our hash variants follow the other name.
-rwxr-xr-xcontrib/scripts/checkpatch.pl4
1 files changed, 4 insertions, 0 deletions
diff --git a/contrib/scripts/checkpatch.pl b/contrib/scripts/checkpatch.pl
index 4c8d512577..fa5a865120 100755
--- a/contrib/scripts/checkpatch.pl
+++ b/contrib/scripts/checkpatch.pl
@@ -197,6 +197,10 @@ complain ("Initialize GError variables to NULL, if you pass them on") if $line =
complain ("Don't use strcmp/g_strcmp0 unless you need to sort. Consider nm_streq()/nm_streq0(),NM_IN_STRSET() for testing equality") if $line =~ /\b(strcmp|g_strcmp0)\b/;
complain ("Don't use API that uses the numeric source id. Instead, use GSource and API like nm_g_idle_add(), nm_g_idle_add_source(), nm_clear_g_source_inst(), etc.") if $line =~ /\b(g_idle_add|g_idle_add_full|g_timeout_add|g_timeout_add_seconds|g_source_remove|nm_clear_g_source)\b/;
complain ("Prefer g_snprintf() over snprintf() (for consistency)") if $line =~ /\b(snprintf)\b/;
+complain ("Prefer nm_str_hash()/nm_direct_hash() over g_str_hash()/g_direct_hash(). Those use siphash24") if $line =~ /\b(g_str_hash|g_direct_hash)\b/;
+complain ("Don't use g_direct_equal() for hash tables, pass NULL for pointer equality which avoids the function call") if $line =~ /\b(g_direct_equal)\b/;
+complain ("Prefer nm_pint_hash()/nm_pint64_hash()/nm_pdouble_hash() over g_int_hash()/g_int64_hash()/g_double_hash(). Those use siphash24") if $line =~ /\b(g_int_hash|g_int64_hash|g_double_hash)\b/;
+complain ("Prefer nm_pint_equal()/nm_pint64_equal()/nm_pdouble_equal() over g_int_equal()/g_int64_equal()/g_double_equal(). Those names mirror our nm_p*_hash() functions") if $line =~ /\b(g_int_equal|g_int64_equal|g_double_equal)\b/;
complain ("Avoid g_clear_pointer() and use nm_clear_pointer() (or nm_clear_g_free(), g_clear_object(), etc.)") if $line =~ /\b(g_clear_pointer)\b/;
complain ("Define setting properties with _nm_setting_property_define_direct_*() API") if $line =~ /g_param_spec_/ and $filename =~ /\/libnm-core-impl\/nm-setting/;
complain ("Use spaces instead of tabs") if $line =~ /\t/;