From c1a165731298b96175b9b0dd80ad088dc8b33dc1 Mon Sep 17 00:00:00 2001 From: Florent Viard Date: Sun, 27 Oct 2019 23:48:16 +0100 Subject: [PATCH] image-vfat: Add label option to set volume name. Signed-off-by: Florent Viard [dariobin@libero.it: remove README.rst changes] Signed-off-by: Dario Binacchi --- image-vfat.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/image-vfat.c b/image-vfat.c index f16242c..3ea7288 100644 --- a/image-vfat.c +++ b/image-vfat.c @@ -27,14 +27,20 @@ static int vfat_generate(struct image *image) int ret; struct partition *part; char *extraargs = cfg_getstr(image->imagesec, "extraargs"); + char *label = cfg_getstr(image->imagesec, "label"); + + if (label && label[0] != '\0') + xasprintf(&label, "-n '%s'", label); + else + label = ""; ret = systemp(image, "%s if=/dev/zero of=\"%s\" seek=%lld count=0 bs=1 2>/dev/null", get_opt("dd"), imageoutfile(image), image->size); if (ret) return ret; - ret = systemp(image, "%s %s '%s'", get_opt("mkdosfs"), - extraargs, imageoutfile(image)); + ret = systemp(image, "%s %s %s '%s'", get_opt("mkdosfs"), + extraargs, label, imageoutfile(image)); if (ret) return ret; @@ -72,11 +78,18 @@ static int vfat_generate(struct image *image) static int vfat_setup(struct image *image, cfg_t *cfg) { + char *label = cfg_getstr(image->imagesec, "label"); + if (!image->size) { image_error(image, "no size given or must not be zero\n"); return -EINVAL; } + if (label && strlen(label) > 11) { + image_error(image, "vfat volume name cannot be longer than 11 characters\n"); + return -EINVAL; + } + return 0; } @@ -112,6 +125,7 @@ static cfg_opt_t file_opts[] = { static cfg_opt_t vfat_opts[] = { CFG_STR("extraargs", "", CFGF_NONE), + CFG_STR("label", "", CFGF_NONE), CFG_STR_LIST("files", 0, CFGF_NONE), CFG_SEC("file", file_opts, CFGF_MULTI | CFGF_TITLE), CFG_END() -- 2.24.0