]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add spatch for dns_diff operations 5802-diff-tuple-mutation-v2 12170/head
authorAlessio Podda <alessio@isc.org>
Thu, 21 May 2026 10:33:59 +0000 (12:33 +0200)
committerAlessio Podda <alessio@isc.org>
Tue, 2 Jun 2026 11:44:32 +0000 (13:44 +0200)
Add an spatch that tries to detech ISC_LIST operations on difftuples
and replaces them with the corresponding dns_diff method.

cocci/dns_diff_list_ops.spatch [new file with mode: 0644]

diff --git a/cocci/dns_diff_list_ops.spatch b/cocci/dns_diff_list_ops.spatch
new file mode 100644 (file)
index 0000000..ad1b504
--- /dev/null
@@ -0,0 +1,140 @@
+// Replace direct mutation of dns_diff_t.tuples with dns_diff_* helpers.
+//
+// Do not run this over lib/dns/diff.c: that file implements the helper
+// functions and must keep the raw ISC_LIST_* operations internally.
+
+@append_ptr_tuplep depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t *D;
+dns_difftuple_t **TP;
+@@
+- ISC_LIST_APPEND(D->tuples, *TP, LINK);
++ dns_diff_append(D, TP);
+
+@append_value_tuplep depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t D;
+dns_difftuple_t **TP;
+@@
+- ISC_LIST_APPEND(D.tuples, *TP, LINK);
++ dns_diff_append(&D, TP);
+
+@append_ptr depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t *D;
+dns_difftuple_t *T;
+@@
+- ISC_LIST_APPEND(D->tuples, T, LINK);
++ dns_diff_append(D, &T);
+
+@append_value depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t D;
+dns_difftuple_t *T;
+@@
+- ISC_LIST_APPEND(D.tuples, T, LINK);
++ dns_diff_append(&D, &T);
+
+@prepend_ptr_tuplep depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t *D;
+dns_difftuple_t **TP;
+@@
+- ISC_LIST_PREPEND(D->tuples, *TP, LINK);
++ dns_diff_prepend(D, TP);
+
+@prepend_value_tuplep depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t D;
+dns_difftuple_t **TP;
+@@
+- ISC_LIST_PREPEND(D.tuples, *TP, LINK);
++ dns_diff_prepend(&D, TP);
+
+@prepend_ptr depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t *D;
+dns_difftuple_t *T;
+@@
+- ISC_LIST_PREPEND(D->tuples, T, LINK);
++ dns_diff_prepend(D, &T);
+
+@prepend_value depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t D;
+dns_difftuple_t *T;
+@@
+- ISC_LIST_PREPEND(D.tuples, T, LINK);
++ dns_diff_prepend(&D, &T);
+
+@unlink_ptr depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t *D;
+dns_difftuple_t *T;
+@@
+- ISC_LIST_UNLINK(D->tuples, T, LINK);
++ dns_diff_unlink(D, T);
+
+@unlink_value depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+typedef dns_difftuple_t;
+identifier LINK =~ "^link$";
+dns_diff_t D;
+dns_difftuple_t *T;
+@@
+- ISC_LIST_UNLINK(D.tuples, T, LINK);
++ dns_diff_unlink(&D, T);
+
+@appendlist_ptr_ptr depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+identifier LINK =~ "^link$";
+dns_diff_t *DST;
+dns_diff_t *SRC;
+@@
+- ISC_LIST_APPENDLIST(DST->tuples, SRC->tuples, LINK);
++ dns_diff_appendlist(DST, SRC);
+
+@appendlist_value_value depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+identifier LINK =~ "^link$";
+dns_diff_t DST;
+dns_diff_t SRC;
+@@
+- ISC_LIST_APPENDLIST(DST.tuples, SRC.tuples, LINK);
++ dns_diff_appendlist(&DST, &SRC);
+
+@appendlist_ptr_value depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+identifier LINK =~ "^link$";
+dns_diff_t *DST;
+dns_diff_t SRC;
+@@
+- ISC_LIST_APPENDLIST(DST->tuples, SRC.tuples, LINK);
++ dns_diff_appendlist(DST, &SRC);
+
+@appendlist_value_ptr depends on !(file in "lib/dns/diff.c") disable ptr_to_array@
+typedef dns_diff_t;
+identifier LINK =~ "^link$";
+dns_diff_t DST;
+dns_diff_t *SRC;
+@@
+- ISC_LIST_APPENDLIST(DST.tuples, SRC->tuples, LINK);
++ dns_diff_appendlist(&DST, SRC);