]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
coccinelle: don't run iovec-make on iovec_done{,_erase}
authorFrantisek Sumsal <frantisek@sumsal.cz>
Wed, 25 Oct 2023 09:16:37 +0000 (11:16 +0200)
committerFrantisek Sumsal <frantisek@sumsal.cz>
Wed, 25 Oct 2023 09:16:37 +0000 (11:16 +0200)
As the result is a bit funky (but still valid), i.e.:

 static inline void iovec_done_erase(struct iovec *iovec) {
         assert(iovec);

-        iovec->iov_base = erase_and_free(iovec->iov_base);
-        iovec->iov_len = 0;
+        *iovec = IOVEC_MAKE(erase_and_free(iovec->iov_base), 0);
 }

coccinelle/iovec-make.cocci

index 79116882fc7079fd2662bf693209cd5f2adf6486..bbbf4a2b008cdca866f96376fbd37687304b0174 100644 (file)
@@ -13,9 +13,13 @@ expression x, p, l;
 - x.iov_len = l;
 + x = IOVEC_MAKE(p, l);
 @@
+/* Don't run this transformation on iovec_done() and iovec_done_erase(),
+ * since the result, albeit correct, is a bit funky. */
+ position pos : script:python() { pos[0].current_element != "iovec_done" and
+                                  pos[0].current_element != "iovec_done_erase" };
 expression x, p, l;
 @@
-- x->iov_base = p;
+- x->iov_base@pos = p;
 - x->iov_len = l;
 + *x = IOVEC_MAKE(p, l);
 @@