diff options
author | Britney Fransen <brfransen@gmail.com> | 2018-09-06 16:35:27 (GMT) |
---|---|---|
committer | Britney Fransen <brfransen@gmail.com> | 2018-09-06 16:35:27 (GMT) |
commit | 5669815ec3a539cf7b5ac7d8da2cbba3aeff44be (patch) | |
tree | f13051093a52f47f5954c2ee2a783bc2f0f62f96 /abs/core/util-linux/0001-sfdisk-support-empty-label-use-case.patch | |
parent | 8d35f28049488f2585ef765bf48e7a58958fd587 (diff) | |
parent | 04697136037cb5341ee6c051f8aaa265c0400c82 (diff) | |
download | linhes_pkgbuild-5669815ec3a539cf7b5ac7d8da2cbba3aeff44be.zip linhes_pkgbuild-5669815ec3a539cf7b5ac7d8da2cbba3aeff44be.tar.gz linhes_pkgbuild-5669815ec3a539cf7b5ac7d8da2cbba3aeff44be.tar.bz2 |
Merge branch 'testing'
Diffstat (limited to 'abs/core/util-linux/0001-sfdisk-support-empty-label-use-case.patch')
-rw-r--r-- | abs/core/util-linux/0001-sfdisk-support-empty-label-use-case.patch | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/abs/core/util-linux/0001-sfdisk-support-empty-label-use-case.patch b/abs/core/util-linux/0001-sfdisk-support-empty-label-use-case.patch deleted file mode 100644 index 29ab44d..0000000 --- a/abs/core/util-linux/0001-sfdisk-support-empty-label-use-case.patch +++ /dev/null @@ -1,223 +0,0 @@ -From 35ca51182782193f555fbdcb06bb10766550d017 Mon Sep 17 00:00:00 2001 -From: Karel Zak <kzak@redhat.com> -Date: Wed, 30 Nov 2016 12:43:10 +0100 -Subject: [PATCH] sfdisk: support empty label use-case - -By default sfdisk creates partition table when a first partition is -specified, otherwise the device is not modified. This force users to -create at least one partition. - -This commit allows to create empty label without partitions if "label: -<name>" header line is specified by script. - -The commit also modifies "New situation:" output to list label name -and label identifier. - -Addresses: https://github.com/karelzak/util-linux/issues/374 -Signed-off-by: Karel Zak <kzak@redhat.com> ---- - disk-utils/fdisk-list.c | 23 +++++++++++++++-------- - disk-utils/fdisk-list.h | 1 + - disk-utils/sfdisk.8 | 18 +++++++++++++++++- - disk-utils/sfdisk.c | 17 +++++++++++++++++ - libfdisk/src/libfdisk.h.in | 1 + - libfdisk/src/libfdisk.sym | 5 +++++ - libfdisk/src/script.c | 20 +++++++++++++++++++- - 7 files changed, 75 insertions(+), 10 deletions(-) - -diff --git a/disk-utils/fdisk-list.c b/disk-utils/fdisk-list.c -index e6b2033..c9560f4 100644 ---- a/disk-utils/fdisk-list.c -+++ b/disk-utils/fdisk-list.c -@@ -34,10 +34,23 @@ static int is_ide_cdrom_or_tape(char *device) - return ret; - } - -+void list_disk_identifier(struct fdisk_context *cxt) -+{ -+ struct fdisk_label *lb = fdisk_get_label(cxt, NULL); -+ char *id = NULL; -+ -+ if (fdisk_has_label(cxt)) -+ fdisk_info(cxt, _("Disklabel type: %s"), -+ fdisk_label_get_name(lb)); -+ -+ if (!fdisk_is_details(cxt) && fdisk_get_disklabel_id(cxt, &id) == 0 && id) { -+ fdisk_info(cxt, _("Disk identifier: %s"), id); -+ free(id); -+ } -+} - - void list_disk_geometry(struct fdisk_context *cxt) - { -- char *id = NULL; - struct fdisk_label *lb = fdisk_get_label(cxt, NULL); - uint64_t bytes = fdisk_get_nsectors(cxt) * fdisk_get_sector_size(cxt); - char *strsz = size_to_human_string(SIZE_SUFFIX_SPACE -@@ -71,14 +84,8 @@ void list_disk_geometry(struct fdisk_context *cxt) - if (fdisk_get_alignment_offset(cxt)) - fdisk_info(cxt, _("Alignment offset: %lu bytes"), - fdisk_get_alignment_offset(cxt)); -- if (fdisk_has_label(cxt)) -- fdisk_info(cxt, _("Disklabel type: %s"), -- fdisk_label_get_name(lb)); - -- if (!fdisk_is_details(cxt) && fdisk_get_disklabel_id(cxt, &id) == 0 && id) { -- fdisk_info(cxt, _("Disk identifier: %s"), id); -- free(id); -- } -+ list_disk_identifier(cxt); - } - - void list_disklabel(struct fdisk_context *cxt) -diff --git a/disk-utils/fdisk-list.h b/disk-utils/fdisk-list.h -index eddab92..4ed5c25 100644 ---- a/disk-utils/fdisk-list.h -+++ b/disk-utils/fdisk-list.h -@@ -2,6 +2,7 @@ - #define UTIL_LINUX_FDISK_LIST_H - - extern void list_disklabel(struct fdisk_context *cxt); -+extern void list_disk_identifier(struct fdisk_context *cxt); - extern void list_disk_geometry(struct fdisk_context *cxt); - extern void list_freespace(struct fdisk_context *cxt); - -diff --git a/disk-utils/sfdisk.8 b/disk-utils/sfdisk.8 -index fcde872..efe4a86 100644 ---- a/disk-utils/sfdisk.8 -+++ b/disk-utils/sfdisk.8 -@@ -212,7 +212,10 @@ Deprecated option. Only the sector unit is supported. - .BR \-X , " \-\-label " \fItype - Specify the disk label type (e.g. \fBdos\fR, \fBgpt\fR, ...). If this option - is not given, then \fBsfdisk\fR defaults to the existing label, but if there --is no label on the device yet, then the type defaults to \fBdos\fR. -+is no label on the device yet, then the type defaults to \fBdos\fR. The default -+or the current label may be overwritten by the "label: <name>" script header -+line. The option \fB\-\-label\fR does not force \fBsfdisk\fR to create empty -+disk label (see the \fBEMPTY DISK LABEL\fR section below). - .TP - .BR \-Y , " \-\-label\-nested " \fItype - Force editing of a nested disk label. The primary disk label has to exist already. -@@ -404,6 +407,19 @@ For backward compatibility the \fBId=\fR field has the same meaning. - .RE - .RE - -+.SH "EMPTY DISK LABEL" -+.B sfdisk -+does not create partition table without partitions by default. The lines with -+partitions are expected in the script by default. The empty partition table has -+to be explicitly requested by "label: <name>" script header line without any -+partitions lines. For example: -+.RS -+.sp -+.B "echo 'label: gpt' | sfdisk /dev/sdb" -+.sp -+.RE -+creates empty GPT partition table. Note that the \fB\-\-append\fR disables this feature. -+ - .SH "BACKING UP THE PARTITION TABLE" - It is recommended to save the layout of your devices. - .B sfdisk -diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c -index 10307ad..2d65974 100644 ---- a/disk-utils/sfdisk.c -+++ b/disk-utils/sfdisk.c -@@ -1766,8 +1766,25 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv) - } - } while (1); - -+ /* create empty disk label if label, but no partition specified */ -+ if (rc == SFDISK_DONE_EOF && created == 0 -+ && fdisk_script_has_force_label(dp) == 1 -+ && fdisk_table_get_nents(tb) == 0 -+ && fdisk_script_get_header(dp, "label")) { -+ -+ int xrc = fdisk_apply_script_headers(sf->cxt, dp); -+ created = !xrc; -+ if (xrc) { -+ fdisk_warnx(sf->cxt, _( -+ "Failed to apply script headers, " -+ "disk label not created.")); -+ rc = SFDISK_DONE_ABORT; -+ } -+ } -+ - if (!sf->quiet && rc != SFDISK_DONE_ABORT) { - fdisk_info(sf->cxt, _("\nNew situation:")); -+ list_disk_identifier(sf->cxt); - list_disklabel(sf->cxt); - } - -diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in -index 9154f5b..59cce19 100644 ---- a/libfdisk/src/libfdisk.h.in -+++ b/libfdisk/src/libfdisk.h.in -@@ -642,6 +642,7 @@ const char *fdisk_script_get_header(struct fdisk_script *dp, const char *name); - int fdisk_script_set_header(struct fdisk_script *dp, const char *name, const char *data); - struct fdisk_table *fdisk_script_get_table(struct fdisk_script *dp); - int fdisk_script_get_nlines(struct fdisk_script *dp); -+int fdisk_script_has_force_label(struct fdisk_script *dp); - - int fdisk_script_set_userdata(struct fdisk_script *dp, void *data); - void *fdisk_script_get_userdata(struct fdisk_script *dp); -diff --git a/libfdisk/src/libfdisk.sym b/libfdisk/src/libfdisk.sym -index 02cd7a8..d6d4ac5 100644 ---- a/libfdisk/src/libfdisk.sym -+++ b/libfdisk/src/libfdisk.sym -@@ -274,3 +274,8 @@ FDISK_2.29 { - fdisk_labelitem_is_number; - fdisk_gpt_set_npartitions; - } FDISK_2.28; -+ -+ -+FDISK_2.30 { -+ fdisk_script_has_force_label; -+} FDISK_2.29; -diff --git a/libfdisk/src/script.c b/libfdisk/src/script.c -index ae7e99a..0d1f260 100644 ---- a/libfdisk/src/script.c -+++ b/libfdisk/src/script.c -@@ -36,7 +36,8 @@ struct fdisk_script { - size_t nlines; - struct fdisk_label *label; - -- unsigned int json : 1; /* JSON output */ -+ unsigned int json : 1, /* JSON output */ -+ force_label : 1; /* label: <name> specified */ - }; - - -@@ -354,6 +355,22 @@ int fdisk_script_get_nlines(struct fdisk_script *dp) - } - - /** -+ * fdisk_script_has_force_label: -+ * @dp: script -+ * -+ * Note that fdisk_script_set_header(dp, "label", name) does not modify -+ * force_label status. The label has to be specified by script. -+ * -+ * Returns: true if "label: <name>" has been parsed. -+ */ -+int fdisk_script_has_force_label(struct fdisk_script *dp) -+{ -+ assert(dp); -+ return dp->force_label; -+} -+ -+ -+/** - * fdisk_script_read_context: - * @dp: script - * @cxt: context -@@ -706,6 +723,7 @@ static int parse_line_header(struct fdisk_script *dp, char *s) - if (strcmp(name, "label") == 0) { - if (dp->cxt && !fdisk_get_label(dp->cxt, value)) - goto done; /* unknown label name */ -+ dp->force_label = 1; - } else if (strcmp(name, "unit") == 0) { - if (strcmp(value, "sectors") != 0) - goto done; /* only "sectors" supported */ --- -2.10.2 - |