all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH qemu] Add format attributes to function candidates
@ 2023-08-07  9:18 Filip Schauer
  2023-08-07 12:05 ` Fiona Ebner
  0 siblings, 1 reply; 2+ messages in thread
From: Filip Schauer @ 2023-08-07  9:18 UTC (permalink / raw)
  To: pve-devel

Add format attributes to functions that take printf-like arguments. This
provides additional compile-time checking that the correct parameters
are passed to the functions.

This fixes compiler warnings generated by the -Wsuggest-attribute=format
flag.

Signed-off-by: Filip Schauer <f.schauer@proxmox.com>
---
 ...-async-for-background-state-snapshots.patch | 13 ++++++++++++-
 ...PVE-Backup-add-vma-backup-format-code.patch | 18 ++++++++++++++----
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch b/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
index 7be1af4..68c5627 100644
--- a/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
+++ b/debian/patches/pve/0017-PVE-add-savevm-async-for-background-state-snapshots.patch
@@ -142,7 +142,7 @@ new file mode 100644
 index 0000000000..ac1fac6378
 --- /dev/null
 +++ b/migration/savevm-async.c
-@@ -0,0 +1,533 @@
+@@ -0,0 +1,544 @@
 +#include "qemu/osdep.h"
 +#include "migration/channel-savevm-async.h"
 +#include "migration/migration.h"
@@ -177,6 +177,16 @@ index 0000000000..ac1fac6378
 +    do { } while (0)
 +#endif
 +
++#ifdef __GNUC__
++#if __GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
++#define PRINTF(i, j)    __attribute__((format (gnu_printf, i, j)))
++#else
++#define PRINTF(i, j)    __attribute__((format (printf, i, j)))
++#endif
++#else
++#define PRINTF(i, j)
++#endif
++
 +enum {
 +    SAVE_STATE_DONE,
 +    SAVE_STATE_ERROR,
@@ -275,6 +285,7 @@ index 0000000000..ac1fac6378
 +    return ret;
 +}
 +
++static void save_snapshot_error(const char *fmt, ...) PRINTF(1, 2);
 +static void save_snapshot_error(const char *fmt, ...)
 +{
 +    va_list ap;
diff --git a/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch b/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
index 8471a6f..5dcd866 100644
--- a/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
+++ b/debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch
@@ -2314,13 +2314,13 @@ index 0000000000..304f02bc84
 +        ret = blk_co_preadv(job->target, start * VMA_CLUSTER_SIZE,
 +                            readlen, &qiov, 0);
 +        if (ret < 0) {
-+            vma_writer_set_error(job->vmaw, "read error", -1);
++            vma_writer_set_error(job->vmaw, "read error");
 +            goto out;
 +        }
 +
 +        size_t zb = 0;
 +        if (vma_writer_write(job->vmaw, job->dev_id, start, buf, &zb) < 0) {
-+            vma_writer_set_error(job->vmaw, "backup_dump_cb vma_writer_write failed", -1);
++            vma_writer_set_error(job->vmaw, "backup_dump_cb vma_writer_write failed");
 +            goto out;
 +        }
 +    }
@@ -2622,7 +2622,7 @@ new file mode 100644
 index 0000000000..1b62859165
 --- /dev/null
 +++ b/vma.h
-@@ -0,0 +1,150 @@
+@@ -0,0 +1,160 @@
 +/*
 + * VMA: Virtual Machine Archive
 + *
@@ -2643,6 +2643,16 @@ index 0000000000..1b62859165
 +#include "qapi/error.h"
 +#include "block/block.h"
 +
++#ifdef __GNUC__
++#if __GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
++#define PRINTF(i, j)    __attribute__((format (gnu_printf, i, j)))
++#else
++#define PRINTF(i, j)    __attribute__((format (printf, i, j)))
++#endif
++#else
++#define PRINTF(i, j)
++#endif
++
 +#define VMA_BLOCK_BITS 12
 +#define VMA_BLOCK_SIZE (1<<VMA_BLOCK_BITS)
 +#define VMA_CLUSTER_BITS (VMA_BLOCK_BITS+4)
@@ -2757,7 +2767,7 @@ index 0000000000..1b62859165
 +int coroutine_fn vma_writer_flush_output(VmaWriter *vmaw);
 +
 +int vma_writer_get_status(VmaWriter *vmaw, VmaStatus *status);
-+void vma_writer_set_error(VmaWriter *vmaw, const char *fmt, ...);
++void vma_writer_set_error(VmaWriter *vmaw, const char *fmt, ...) PRINTF(2, 3);
 +
 +
 +VmaReader *vma_reader_create(const char *filename, Error **errp);
-- 
2.39.2





^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [pve-devel] [PATCH qemu] Add format attributes to function candidates
  2023-08-07  9:18 [pve-devel] [PATCH qemu] Add format attributes to function candidates Filip Schauer
@ 2023-08-07 12:05 ` Fiona Ebner
  0 siblings, 0 replies; 2+ messages in thread
From: Fiona Ebner @ 2023-08-07 12:05 UTC (permalink / raw)
  To: Proxmox VE development discussion, Filip Schauer

Am 07.08.23 um 11:18 schrieb Filip Schauer:
> Add format attributes to functions that take printf-like arguments. This
> provides additional compile-time checking that the correct parameters
> are passed to the functions.
> 
> This fixes compiler warnings generated by the -Wsuggest-attribute=format
> flag.
>

Which will actually be treated as an error after rebasing to QEMU 8.1,
so I already have a change for this lined-up. If you want, you can send
a v2 with my suggestion below, otherwise I'll just do the change when
rebasing to 8.1.

> @@ -177,6 +177,16 @@ index 0000000000..ac1fac6378
>  +    do { } while (0)
>  +#endif
>  +
> ++#ifdef __GNUC__
> ++#if __GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
> ++#define PRINTF(i, j)    __attribute__((format (gnu_printf, i, j)))
> ++#else
> ++#define PRINTF(i, j)    __attribute__((format (printf, i, j)))
> ++#endif
> ++#else
> ++#define PRINTF(i, j)
> ++#endif
> ++

Note that QEMU already defines and uses a macro G_GNUC_PRINTF for this,
so I'd really like to use that in our patches too, no need to cook up
our own :)




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-08-07 12:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-07  9:18 [pve-devel] [PATCH qemu] Add format attributes to function candidates Filip Schauer
2023-08-07 12:05 ` Fiona Ebner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal