From 609468bc9ba424c839991ab6ca52c5778ae0cbf3 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Fri, 18 Jun 2021 16:41:20 +0200 Subject: [PATCH] libfdisk: add and fix __format__ attributes Reported-by: Jan Pazdziora Signed-off-by: Karel Zak --- disk-utils/cfdisk.c | 49 +++++++++++++++++++++++++------------- disk-utils/fdisk-list.c | 16 ++++++------- disk-utils/sfdisk.c | 4 ++-- libfdisk/src/dos.c | 22 +++++++++-------- libfdisk/src/gpt.c | 13 +++++----- libfdisk/src/libfdisk.h.in | 9 ++++--- libfdisk/src/sgi.c | 5 ++-- libfdisk/src/sun.c | 8 +++---- 8 files changed, 74 insertions(+), 52 deletions(-) diff --git a/disk-utils/cfdisk.c b/disk-utils/cfdisk.c index 747953b22a..b8891316eb 100644 --- a/disk-utils/cfdisk.c +++ b/disk-utils/cfdisk.c @@ -141,9 +141,14 @@ static void menu_refresh_size(struct cfdisk *cf); static int ui_end(void); static int ui_refresh(struct cfdisk *cf); -static void ui_warnx(const char *fmt, ...); -static void ui_warn(const char *fmt, ...); -static void ui_info(const char *fmt, ...); + +static void ui_warnx(const char *fmt, ...) + __attribute__((__format__ (__printf__, 1, 2))); +static void ui_warn(const char *fmt, ...) + __attribute__((__format__ (__printf__, 1, 2))); +static void ui_info(const char *fmt, ...) + __attribute__((__format__ (__printf__, 1, 2))); + static void ui_draw_menu(struct cfdisk *cf); static int ui_menu_move(struct cfdisk *cf, int key); static void ui_menu_resize(struct cfdisk *cf); @@ -630,13 +635,13 @@ static int ask_callback(struct fdisk_context *cxt __attribute__((__unused__)), switch(fdisk_ask_get_type(ask)) { case FDISK_ASKTYPE_INFO: - ui_info(fdisk_ask_print_get_mesg(ask)); + ui_info("%s", fdisk_ask_print_get_mesg(ask)); break; case FDISK_ASKTYPE_WARNX: - ui_warnx(fdisk_ask_print_get_mesg(ask)); + ui_warnx("%s", fdisk_ask_print_get_mesg(ask)); break; case FDISK_ASKTYPE_WARN: - ui_warn(fdisk_ask_print_get_mesg(ask)); + ui_warn("%s", fdisk_ask_print_get_mesg(ask)); break; case FDISK_ASKTYPE_MENU: ask_menu(ask, (struct cfdisk *) data); @@ -668,7 +673,8 @@ static int ui_end(void) return 0; } -static void ui_vprint_center(size_t line, int attrs, const char *fmt, va_list ap) +static void __attribute__((__format__ (__printf__, 3, 0))) + ui_vprint_center(size_t line, int attrs, const char *fmt, va_list ap) { size_t width; char *buf = NULL; @@ -698,7 +704,8 @@ static void ui_vprint_center(size_t line, int attrs, const char *fmt, va_list ap free(buf); } -static void ui_center(size_t line, const char *fmt, ...) +static void __attribute__((__format__ (__printf__, 2, 3))) + ui_center(size_t line, const char *fmt, ...) { va_list ap; va_start(ap, fmt); @@ -706,7 +713,8 @@ static void ui_center(size_t line, const char *fmt, ...) va_end(ap); } -static void ui_warnx(const char *fmt, ...) +static void __attribute__((__format__ (__printf__, 1, 2))) + ui_warnx(const char *fmt, ...) { va_list ap; va_start(ap, fmt); @@ -721,7 +729,8 @@ static void ui_warnx(const char *fmt, ...) va_end(ap); } -static void ui_warn(const char *fmt, ...) +static void __attribute__((__format__ (__printf__, 1, 2))) + ui_warn(const char *fmt, ...) { char *fmt_m; va_list ap; @@ -747,8 +756,10 @@ static void ui_clean_warn(void) clrtoeol(); } -static int __attribute__((__noreturn__)) ui_err(int rc, const char *fmt, ...) - { +static int __attribute__((__noreturn__)) + __attribute__((__format__ (__printf__, 2, 3))) + ui_err(int rc, const char *fmt, ...) +{ va_list ap; ui_end(); @@ -761,7 +772,9 @@ static int __attribute__((__noreturn__)) ui_err(int rc, const char *fmt, ...) exit(rc); } -static int __attribute__((__noreturn__)) ui_errx(int rc, const char *fmt, ...) +static int __attribute__((__noreturn__)) + __attribute__((__format__ (__printf__, 2, 3))) + ui_errx(int rc, const char *fmt, ...) { va_list ap; ui_end(); @@ -775,7 +788,8 @@ static int __attribute__((__noreturn__)) ui_errx(int rc, const char *fmt, ...) exit(rc); } -static void ui_info(const char *fmt, ...) +static void __attribute__((__format__ (__printf__, 1, 2))) + ui_info(const char *fmt, ...) { va_list ap; va_start(ap, fmt); @@ -796,7 +810,8 @@ static void ui_clean_info(void) clrtoeol(); } -static void ui_hint(const char *fmt, ...) +static void __attribute__((__format__ (__printf__, 1, 2))) + ui_hint(const char *fmt, ...) { va_list ap; va_start(ap, fmt); @@ -1130,7 +1145,7 @@ static void ui_draw_menuitem(struct cfdisk *cf, if (cf->menu->idx == idx) { standend(); if (d->desc) - ui_hint(_(d->desc)); + ui_hint("%s", _(d->desc)); } } @@ -1778,7 +1793,7 @@ static ssize_t ui_get_string(const char *prompt, mbs_edit_goto(edit, MBS_EDIT_END); if (hint) - ui_hint(hint); + ui_hint("%s", hint); else ui_clean_hint(); diff --git a/disk-utils/fdisk-list.c b/disk-utils/fdisk-list.c index 62aa2b3f5c..9f64decaba 100644 --- a/disk-utils/fdisk-list.c +++ b/disk-utils/fdisk-list.c @@ -68,10 +68,10 @@ void list_disk_geometry(struct fdisk_context *cxt) fdisk_info(cxt, _("Disk model: %s"), fdisk_get_devmodel(cxt)); if (lb && (fdisk_label_require_geometry(lb) || fdisk_use_cylinders(cxt))) - fdisk_info(cxt, _("Geometry: %d heads, %llu sectors/track, %llu cylinders"), + fdisk_info(cxt, _("Geometry: %d heads, %ju sectors/track, %ju cylinders"), fdisk_get_geom_heads(cxt), - fdisk_get_geom_sectors(cxt), - fdisk_get_geom_cylinders(cxt)); + (uintmax_t) fdisk_get_geom_sectors(cxt), + (uintmax_t) fdisk_get_geom_cylinders(cxt)); fdisk_info(cxt, _("Units: %s of %d * %ld = %ld bytes"), fdisk_get_unit(cxt, FDISK_PLURAL), @@ -182,7 +182,7 @@ void list_disklabel(struct fdisk_context *cxt) /* print */ if (!scols_table_is_empty(out)) { - fdisk_info(cxt, ""); /* just line break */ + fdisk_info(cxt, "%s", ""); /* just line break */ scols_print_table(out); } @@ -193,14 +193,14 @@ void list_disklabel(struct fdisk_context *cxt) continue; if (!fdisk_lba_is_phy_aligned(cxt, fdisk_partition_get_start(pa))) { if (!post) - fdisk_info(cxt, ""); /* line break */ + fdisk_info(cxt, "%s", ""); /* line break */ fdisk_warnx(cxt, _("Partition %zu does not start on physical sector boundary."), fdisk_partition_get_partno(pa) + 1); post++; } if (fdisk_partition_has_wipe(cxt, pa)) { if (!post) - fdisk_info(cxt, ""); /* line break */ + fdisk_info(cxt, "%s", ""); /* line break */ fdisk_info(cxt, _("Filesystem/RAID signature on partition %zu will be wiped."), fdisk_partition_get_partno(pa) + 1); @@ -210,7 +210,7 @@ void list_disklabel(struct fdisk_context *cxt) if (fdisk_table_wrong_order(tb)) { if (!post) - fdisk_info(cxt, ""); /* line break */ + fdisk_info(cxt, "%s", ""); /* line break */ fdisk_info(cxt, _("Partition table entries are not in disk order.")); } done: @@ -308,7 +308,7 @@ void list_freespace(struct fdisk_context *cxt) /* print */ if (!scols_table_is_empty(out)) { - fdisk_info(cxt, ""); /* line break */ + fdisk_info(cxt, "%s", ""); /* line break */ scols_print_table(out); } done: diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c index 3d390edf93..526d090071 100644 --- a/disk-utils/sfdisk.c +++ b/disk-utils/sfdisk.c @@ -468,7 +468,7 @@ static int move_partition_data(struct sfdisk *sf, size_t partno, struct fdisk_pa typescript = mk_backup_filename_tpl(sf->move_typescript, devname, ".move"); if (!sf->quiet) { - fdisk_info(sf->cxt,""); + fdisk_info(sf->cxt, "%s", ""); color_scheme_enable("header", UL_COLOR_BOLD); fdisk_info(sf->cxt, sf->noact ? _("Data move: (--no-act)") : _("Data move:")); color_disable(); @@ -1926,7 +1926,7 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv) rc = fdisk_add_partition(sf->cxt, pa, &cur_partno); if (rc) { errno = -rc; - fdisk_warn(sf->cxt, _("Failed to add #%d partition"), next_partno + 1); + fdisk_warn(sf->cxt, _("Failed to add #%zu partition"), next_partno + 1); } } diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c index 4368e52666..eabedcc572 100644 --- a/libfdisk/src/dos.c +++ b/libfdisk/src/dos.c @@ -1257,7 +1257,8 @@ static int add_partition(struct fdisk_context *cxt, size_t n, if (start >= temp + fdisk_get_units_per_sector(cxt) && read) { if (!pa || !pa->start_follow_default) - fdisk_info(cxt, _("Sector %llu is already allocated."), temp); + fdisk_info(cxt, _("Sector %ju is already allocated."), + (uintmax_t) temp); temp = start; read = 0; if (pa && fdisk_partition_has_start(pa)) @@ -1513,12 +1514,13 @@ static void check(struct fdisk_context *cxt, size_t n, "maximum %d"), n, h + 1, cxt->geom.heads); if (real_s >= cxt->geom.sectors) fdisk_warnx(cxt, _("Partition %zu: sector %d greater than " - "maximum %llu"), n, s, cxt->geom.sectors); + "maximum %ju"), n, s, + (uintmax_t) cxt->geom.sectors); if (real_c >= cxt->geom.cylinders) fdisk_warnx(cxt, _("Partition %zu: cylinder %d greater than " - "maximum %llu"), + "maximum %ju"), n, real_c + 1, - cxt->geom.cylinders); + (uintmax_t) cxt->geom.cylinders); if (cxt->geom.cylinders <= 1024 && start != total) fdisk_warnx(cxt, _("Partition %zu: previous sectors %u " @@ -1704,11 +1706,11 @@ static int dos_verify_disklabel(struct fdisk_context *cxt) if (!nerrors) { fdisk_info(cxt, _("No errors detected.")); if (total > n_sectors) - fdisk_info(cxt, _("Total allocated sectors %llu greater " - "than the maximum %llu."), total, n_sectors); + fdisk_info(cxt, _("Total allocated sectors %ju greater " + "than the maximum %ju."), (uintmax_t) total, (uintmax_t) n_sectors); else if (total < n_sectors) - fdisk_info(cxt, _("Remaining %lld unallocated %ld-byte " - "sectors."), n_sectors - total, cxt->sector_size); + fdisk_info(cxt, _("Remaining %ju unallocated %ld-byte " + "sectors."), (uintmax_t) n_sectors - total, cxt->sector_size); } else fdisk_warnx(cxt, P_("%d error detected.", "%d errors detected.", nerrors), @@ -1873,10 +1875,10 @@ static int dos_add_partition(struct fdisk_context *cxt, msg = _("All space for primary partitions is in use."); if (pa && fdisk_partition_has_start(pa)) { - fdisk_warnx(cxt, msg); + fdisk_warnx(cxt, "%s", msg); return -EINVAL; } - fdisk_info(cxt, msg); + fdisk_info(cxt, "%s", msg); } DBG(LABEL, ul_debug("DOS: trying logical")); rc = add_logical(cxt, pa, &res); diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c index 97b161312e..5bda051de5 100644 --- a/libfdisk/src/gpt.c +++ b/libfdisk/src/gpt.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -50,7 +51,7 @@ #define EFI_PMBR_OSTYPE 0xEE #define MSDOS_MBR_SIGNATURE 0xAA55 #define GPT_PART_NAME_LEN (72 / sizeof(uint16_t)) -#define GPT_NPARTITIONS FDISK_GPT_NPARTITIONS_DEFAULT +#define GPT_NPARTITIONS ((size_t) FDISK_GPT_NPARTITIONS_DEFAULT) /* Globally unique identifier */ struct gpt_guid { @@ -951,7 +952,7 @@ static int valid_pmbr(struct fdisk_context *cxt) fdisk_warnx(cxt, _("GPT PMBR size mismatch (%"PRIu64" != %"PRIu64") " "will be corrected by write."), - sz_lba, cxt->total_sectors - 1ULL); + sz_lba, cxt->total_sectors - (uint64_t) 1); /* Note that gpt_write_pmbr() overwrites PMBR, but we want to keep it valid already * in memory too to disable warnings when valid_pmbr() called next time */ @@ -2677,7 +2678,7 @@ static int gpt_create_disklabel(struct fdisk_context *cxt) fdisk_info(cxt, _("Created a new GPT disklabel (GUID: %s)."), str); if (gpt_get_nentries(gpt) < GPT_NPARTITIONS) - fdisk_info(cxt, _("The maximal number of partitions is %d (default is %d)."), + fdisk_info(cxt, _("The maximal number of partitions is %zu (default is %zu)."), gpt_get_nentries(gpt), GPT_NPARTITIONS); done: return rc; @@ -2758,7 +2759,7 @@ static int gpt_check_table_overlap(struct fdisk_context *cxt, } if (gpt_partition_end(e) > last_usable) { fdisk_warnx(cxt, _("Partition #%zu out of range (maximal end is %"PRIu64" sectors)"), - i + 1, last_usable - 1ULL); + i + 1, last_usable - (uint64_t) 1); rc = -EINVAL; } } @@ -2806,7 +2807,7 @@ int fdisk_gpt_set_npartitions(struct fdisk_context *cxt, uint32_t nents) fdisk_warnx(cxt, _("The partition entry size is zero.")); else fdisk_warnx(cxt, _("The number of the partition has to be smaller than %zu."), - UINT32_MAX / entry_size); + (size_t) UINT32_MAX / entry_size); return rc; } @@ -2858,7 +2859,7 @@ int fdisk_gpt_set_npartitions(struct fdisk_context *cxt, uint32_t nents) /* update library info */ cxt->label->nparts_max = gpt_get_nentries(gpt); - fdisk_info(cxt, _("Partition table length changed from %"PRIu32" to %"PRIu64"."), + fdisk_info(cxt, _("Partition table length changed from %"PRIu32" to %"PRIu32"."), old_nents, nents); fdisk_label_set_changed(cxt->label, 1); diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in index 6f2e77d047..238aa1304b 100644 --- a/libfdisk/src/libfdisk.h.in +++ b/libfdisk/src/libfdisk.h.in @@ -875,9 +875,12 @@ size_t fdisk_ask_menu_get_nitems(struct fdisk_ask *ask); int fdisk_ask_print_get_errno(struct fdisk_ask *ask); const char *fdisk_ask_print_get_mesg(struct fdisk_ask *ask); -int fdisk_info(struct fdisk_context *cxt, const char *fmt, ...); -int fdisk_warn(struct fdisk_context *cxt, const char *fmt, ...); -int fdisk_warnx(struct fdisk_context *cxt, const char *fmt, ...); +int fdisk_info(struct fdisk_context *cxt, const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +int fdisk_warn(struct fdisk_context *cxt, const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +int fdisk_warnx(struct fdisk_context *cxt, const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); /* utils.h */ extern char *fdisk_partname(const char *dev, size_t partno); diff --git a/libfdisk/src/sgi.c b/libfdisk/src/sgi.c index 64adf34543..6740535046 100644 --- a/libfdisk/src/sgi.c +++ b/libfdisk/src/sgi.c @@ -987,9 +987,10 @@ static int sgi_create_disklabel(struct fdisk_context *cxt) /* otherwise print error and use truncated version */ fdisk_warnx(cxt, _("BLKGETSIZE ioctl failed on %s. " - "Using geometry cylinder value of %llu. " + "Using geometry cylinder value of %ju. " "This value may be truncated for devices " - "> 33.8 GB."), cxt->dev_path, cxt->geom.cylinders); + "> 33.8 GB."), cxt->dev_path, + (uintmax_t) cxt->geom.cylinders); } } diff --git a/libfdisk/src/sun.c b/libfdisk/src/sun.c index 4c3b1d8cb6..dde9750a0e 100644 --- a/libfdisk/src/sun.c +++ b/libfdisk/src/sun.c @@ -83,10 +83,10 @@ static void set_partition(struct fdisk_context *cxt, size_t i, fdisk_label_get_parttype_from_code(cxt->label, sysid); if (start / (cxt->geom.heads * cxt->geom.sectors) > UINT32_MAX) - fdisk_warnx(cxt, _("%#zu: start cylinder overflows Sun label limits"), i+1); + fdisk_warnx(cxt, _("#%zu: start cylinder overflows Sun label limits"), i+1); if (stop - start > UINT32_MAX) - fdisk_warnx(cxt, _("%#zu: number of sectors overflow Sun label limits"), i+1); + fdisk_warnx(cxt, _("#%zu: number of sectors overflow Sun label limits"), i+1); sunlabel->vtoc.infos[i].id = cpu_to_be16(sysid); sunlabel->vtoc.infos[i].flags = cpu_to_be16(0); @@ -246,10 +246,10 @@ static int sun_create_disklabel(struct fdisk_context *cxt) } else { fdisk_warnx(cxt, _("BLKGETSIZE ioctl failed on %s. " - "Using geometry cylinder value of %llu. " + "Using geometry cylinder value of %ju. " "This value may be truncated for devices " "> 33.8 GB."), - cxt->dev_path, cxt->geom.cylinders); + cxt->dev_path, (uintmax_t) cxt->geom.cylinders); } } else ask_geom(cxt); -- 2.47.2