commit: 2d7a92fd3469238ae4f12b591f79239c4e0e892d
parent 10b83649e920920e26c3b4e6e2d319a198156402
Author: Michael Forney <mforney@mforney.org>
Date: Wed, 19 Jun 2019 18:45:11 -0700
util-linux: Fix a few portability issues
Diffstat:
8 files changed, 489 insertions(+), 1 deletion(-)
diff --git a/.gitmodules b/.gitmodules
@@ -239,6 +239,7 @@
[submodule "pkg/util-linux/src"]
path = pkg/util-linux/src
url = https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git
+ ignore = all
[submodule "pkg/velox/src"]
path = pkg/velox/src
url = https://github.com/michaelforney/velox
diff --git a/pkg/util-linux/patch/0001-Don-t-omit-second-operand-to-operator.patch b/pkg/util-linux/patch/0001-Don-t-omit-second-operand-to-operator.patch
@@ -0,0 +1,95 @@
+From c8ea4def89774dbc0e0d4957108c7d6d18a00320 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 18 Jun 2019 01:38:53 -0700
+Subject: [PATCH] Don't omit second operand to `?` operator
+
+---
+ libfdisk/src/bsd.c | 2 +-
+ libfdisk/src/dos.c | 2 +-
+ libfdisk/src/gpt.c | 2 +-
+ libfdisk/src/parttype.c | 2 +-
+ libfdisk/src/sgi.c | 2 +-
+ libfdisk/src/sun.c | 2 +-
+ 6 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/libfdisk/src/bsd.c b/libfdisk/src/bsd.c
+index 4e05bb328..817f50c87 100644
+--- a/libfdisk/src/bsd.c
++++ b/libfdisk/src/bsd.c
+@@ -116,7 +116,7 @@ static struct fdisk_parttype *bsd_partition_parttype(
+ {
+ struct fdisk_parttype *t
+ = fdisk_label_get_parttype_from_code(cxt->label, p->p_fstype);
+- return t ? : fdisk_new_unknown_parttype(p->p_fstype, NULL);
++ return t ? t : fdisk_new_unknown_parttype(p->p_fstype, NULL);
+ }
+
+
+diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c
+index 6dc276e8a..2543edc04 100644
+--- a/libfdisk/src/dos.c
++++ b/libfdisk/src/dos.c
+@@ -136,7 +136,7 @@ static struct fdisk_parttype *dos_partition_parttype(
+ {
+ struct fdisk_parttype *t
+ = fdisk_label_get_parttype_from_code(cxt->label, p->sys_ind);
+- return t ? : fdisk_new_unknown_parttype(p->sys_ind, NULL);
++ return t ? t : fdisk_new_unknown_parttype(p->sys_ind, NULL);
+ }
+
+ /*
+diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c
+index 1658782a8..64a9cd7b3 100644
+--- a/libfdisk/src/gpt.c
++++ b/libfdisk/src/gpt.c
+@@ -384,7 +384,7 @@ static struct fdisk_parttype *gpt_partition_parttype(
+
+ guid_to_string(&guid, str);
+ t = fdisk_label_get_parttype_from_string(cxt->label, str);
+- return t ? : fdisk_new_unknown_parttype(0, str);
++ return t ? t : fdisk_new_unknown_parttype(0, str);
+ }
+
+ static void gpt_entry_set_type(struct gpt_entry *e, struct gpt_guid *uuid)
+diff --git a/libfdisk/src/parttype.c b/libfdisk/src/parttype.c
+index 110ef3ba7..5dfe51996 100644
+--- a/libfdisk/src/parttype.c
++++ b/libfdisk/src/parttype.c
+@@ -354,7 +354,7 @@ struct fdisk_parttype *fdisk_label_parse_parttype(
+
+ done:
+ DBG(PARTTYPE, ul_debugobj(ret, "returns parsed '%s' [%s] partition type",
+- ret->name, ret->typestr ? : ""));
++ ret->name, ret->typestr ? ret->typestr : ""));
+ return ret;
+ }
+
+diff --git a/libfdisk/src/sgi.c b/libfdisk/src/sgi.c
+index 884e385ac..4bdc5729c 100644
+--- a/libfdisk/src/sgi.c
++++ b/libfdisk/src/sgi.c
+@@ -351,7 +351,7 @@ static struct fdisk_parttype *sgi_get_parttype(struct fdisk_context *cxt, size_t
+ return NULL;
+
+ t = fdisk_label_get_parttype_from_code(cxt->label, sgi_get_sysid(cxt, n));
+- return t ? : fdisk_new_unknown_parttype(sgi_get_sysid(cxt, n), NULL);
++ return t ? t : fdisk_new_unknown_parttype(sgi_get_sysid(cxt, n), NULL);
+ }
+
+ /* fdisk_get_partition() backend */
+diff --git a/libfdisk/src/sun.c b/libfdisk/src/sun.c
+index df91f543d..b1fb26d06 100644
+--- a/libfdisk/src/sun.c
++++ b/libfdisk/src/sun.c
+@@ -819,7 +819,7 @@ static struct fdisk_parttype *sun_get_parttype(
+
+ t = fdisk_label_get_parttype_from_code(cxt->label,
+ be16_to_cpu(sunlabel->vtoc.infos[n].id));
+- return t ? : fdisk_new_unknown_parttype(be16_to_cpu(sunlabel->vtoc.infos[n].id), NULL);
++ return t ? t : fdisk_new_unknown_parttype(be16_to_cpu(sunlabel->vtoc.infos[n].id), NULL);
+ }
+
+
+--
+2.20.1
+
diff --git a/pkg/util-linux/patch/0002-Avoid-a-few-unnecessary-statement-expressions.patch b/pkg/util-linux/patch/0002-Avoid-a-few-unnecessary-statement-expressions.patch
@@ -0,0 +1,55 @@
+From aa429b34bbaf8fee4f8f0d625cd0b9813d9ba733 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 18 Jun 2019 02:29:07 -0700
+Subject: [PATCH] Avoid a few unnecessary statement expressions
+
+---
+ include/c.h | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+diff --git a/include/c.h b/include/c.h
+index 02e9e59fa..ec3f545ad 100644
+--- a/include/c.h
++++ b/include/c.h
+@@ -159,9 +159,8 @@
+ * @member: the name of the member within the struct.
+ */
+ #ifndef container_of
+-#define container_of(ptr, type, member) __extension__ ({ \
+- const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
+- (type *)( (char *)__mptr - offsetof(type,member) );})
++#define container_of(ptr, type, member) \
++ ((type *)( (char *)ptr - offsetof(type,member) ))
+ #endif
+
+ #ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME
+@@ -239,11 +238,11 @@ errmsg(char doexit, int excode, char adderr, const char *fmt, ...)
+
+ /* Don't use inline function to avoid '#include "nls.h"' in c.h
+ */
+-#define errtryhelp(eval) __extension__ ({ \
++#define errtryhelp(eval) do { \
+ fprintf(stderr, _("Try '%s --help' for more information.\n"), \
+ program_invocation_short_name); \
+ exit(eval); \
+-})
++} while (0)
+
+ /* After failed execvp() */
+ #define EX_EXEC_FAILED 126 /* Program located, but not usable. */
+@@ -364,10 +363,10 @@ static inline int xusleep(useconds_t usec)
+
+ #define UTIL_LINUX_VERSION _("%s from %s\n"), program_invocation_short_name, PACKAGE_STRING
+
+-#define print_version(eval) __extension__ ({ \
++#define print_version(eval) do { \
+ printf(UTIL_LINUX_VERSION); \
+ exit(eval); \
+-})
++} while (0)
+
+ /*
+ * scanf modifiers for "strings allocation"
+--
+2.20.1
+
diff --git a/pkg/util-linux/patch/0003-Don-t-use-min-to-determine-if-dflt-is-non-zero.patch b/pkg/util-linux/patch/0003-Don-t-use-min-to-determine-if-dflt-is-non-zero.patch
@@ -0,0 +1,36 @@
+From 417ef5a41b19c9cc7ccdf3002453c0fec9caa960 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 18 Jun 2019 02:31:19 -0700
+Subject: [PATCH] Don't use min to determine if dflt is non-zero
+
+---
+ libfdisk/src/bsd.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/libfdisk/src/bsd.c b/libfdisk/src/bsd.c
+index 817f50c87..25e878c32 100644
+--- a/libfdisk/src/bsd.c
++++ b/libfdisk/src/bsd.c
+@@ -576,8 +576,7 @@ static uint32_t ask_uint32(struct fdisk_context *cxt,
+ {
+ uintmax_t res;
+
+- if (fdisk_ask_number(cxt, min(dflt, (uint32_t) 1), dflt,
+- UINT32_MAX, mesg, &res) == 0)
++ if (fdisk_ask_number(cxt, !!dflt, dflt, UINT32_MAX, mesg, &res) == 0)
+ return res;
+ return dflt;
+ }
+@@ -587,8 +586,7 @@ static uint16_t ask_uint16(struct fdisk_context *cxt,
+ {
+ uintmax_t res;
+
+- if (fdisk_ask_number(cxt, min(dflt, (uint16_t) 1),
+- dflt, UINT16_MAX, mesg, &res) == 0)
++ if (fdisk_ask_number(cxt, !!dflt, dflt, UINT16_MAX, mesg, &res) == 0)
+ return res;
+ return dflt;
+ }
+--
+2.20.1
+
diff --git a/pkg/util-linux/patch/0004-Remove-need-for-VLA-for-label-name.patch b/pkg/util-linux/patch/0004-Remove-need-for-VLA-for-label-name.patch
@@ -0,0 +1,83 @@
+From 7e73e83c21c9b20dadd429b06db30b2ff8ef5c2b Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 18 Jun 2019 11:54:57 -0700
+Subject: [PATCH] Remove need for VLA for label name
+
+---
+ disk-utils/fdisk-list.c | 10 +++-------
+ libfdisk/src/label.c | 6 ++++--
+ libfdisk/src/libfdisk.h.in | 2 +-
+ 3 files changed, 8 insertions(+), 10 deletions(-)
+
+diff --git a/disk-utils/fdisk-list.c b/disk-utils/fdisk-list.c
+index 6bc52d704..66c04fb6a 100644
+--- a/disk-utils/fdisk-list.c
++++ b/disk-utils/fdisk-list.c
+@@ -464,19 +464,15 @@ void list_available_columns(FILE *out)
+ static int fieldname_to_id(const char *name, size_t namesz)
+ {
+ const struct fdisk_field *fl;
+- char buf[namesz + 1];
+
+ assert(name);
+ assert(namesz);
+ assert(fields_label);
+
+- memcpy(buf, name, namesz);
+- buf[namesz] = '\0';
+-
+- fl = fdisk_label_get_field_by_name(fields_label, buf);
++ fl = fdisk_label_get_field_by_name(fields_label, name, namesz);
+ if (!fl) {
+- warnx(_("%s unknown column: %s"),
+- fdisk_label_get_name(fields_label), buf);
++ warnx(_("%s unknown column: %.*s"),
++ fdisk_label_get_name(fields_label), (int)namesz, name);
+ return -1;
+ }
+ return fdisk_field_get_id(fl);
+diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c
+index 2a11acad6..dcd35cfdc 100644
+--- a/libfdisk/src/label.c
++++ b/libfdisk/src/label.c
+@@ -223,12 +223,14 @@ const struct fdisk_field *fdisk_label_get_field(const struct fdisk_label *lb, in
+ * fdisk_label_get_field_by_name
+ * @lb: label
+ * @name: field name
++ * @len: field name length
+ *
+ * Returns: pointer to static instance of the field.
+ */
+ const struct fdisk_field *fdisk_label_get_field_by_name(
+ const struct fdisk_label *lb,
+- const char *name)
++ const char *name,
++ size_t len)
+ {
+ size_t i;
+
+@@ -236,7 +238,7 @@ const struct fdisk_field *fdisk_label_get_field_by_name(
+ assert(name);
+
+ for (i = 0; i < lb->nfields; i++) {
+- if (lb->fields[i].name && strcasecmp(lb->fields[i].name, name) == 0)
++ if (lb->fields[i].name && strncasecmp(lb->fields[i].name, name, len) == 0 && lb->fields[i].name[len] == '\0')
+ return &lb->fields[i];
+ }
+
+diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in
+index 47e778a67..09fdc4522 100644
+--- a/libfdisk/src/libfdisk.h.in
++++ b/libfdisk/src/libfdisk.h.in
+@@ -423,7 +423,7 @@ extern int fdisk_label_get_fields_ids_all(
+ extern const struct fdisk_field *fdisk_label_get_field(const struct fdisk_label *lb, int id);
+ extern const struct fdisk_field *fdisk_label_get_field_by_name(
+ const struct fdisk_label *lb,
+- const char *name);
++ const char *name, size_t len);
+
+ extern void fdisk_label_set_changed(struct fdisk_label *lb, int changed);
+ extern int fdisk_label_is_changed(const struct fdisk_label *lb);
+--
+2.20.1
+
diff --git a/pkg/util-linux/patch/0005-Avoid-statement-expressions-min-max.patch b/pkg/util-linux/patch/0005-Avoid-statement-expressions-min-max.patch
@@ -0,0 +1,190 @@
+From cdb8be2758e0b8082d86bd38daec78c1efb6383f Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 12 Mar 2019 17:13:45 -0700
+Subject: [PATCH] Avoid statement expressions min/max
+
+---
+ include/c.h | 24 ++++++++++--------------
+ lib/mbsalign.c | 2 +-
+ libfdisk/src/alignment.c | 8 ++++----
+ libfdisk/src/context.c | 2 +-
+ libfdisk/src/gpt.c | 4 ++--
+ libsmartcols/src/calculate.c | 8 ++++----
+ libsmartcols/src/column.c | 2 +-
+ 7 files changed, 23 insertions(+), 27 deletions(-)
+
+diff --git a/include/c.h b/include/c.h
+index ec3f545ad..0b96ff1c0 100644
+--- a/include/c.h
++++ b/include/c.h
+@@ -124,21 +124,17 @@
+ # define FALSE 0
+ #endif
+
+-#ifndef min
+-# define min(x, y) __extension__ ({ \
+- __typeof__(x) _min1 = (x); \
+- __typeof__(y) _min2 = (y); \
+- (void) (&_min1 == &_min2); \
+- _min1 < _min2 ? _min1 : _min2; })
+-#endif
++static inline uintmax_t
++umax(uintmax_t x, uintmax_t y)
++{
++ return x > y ? x : y;
++}
+
+-#ifndef max
+-# define max(x, y) __extension__ ({ \
+- __typeof__(x) _max1 = (x); \
+- __typeof__(y) _max2 = (y); \
+- (void) (&_max1 == &_max2); \
+- _max1 > _max2 ? _max1 : _max2; })
+-#endif
++static inline uintmax_t
++umin(uintmax_t x, uintmax_t y)
++{
++ return x < y ? x : y;
++}
+
+ #ifndef cmp_numbers
+ # define cmp_numbers(x, y) __extension__ ({ \
+diff --git a/lib/mbsalign.c b/lib/mbsalign.c
+index 8fdab9ee9..bb31e7583 100644
+--- a/lib/mbsalign.c
++++ b/lib/mbsalign.c
+@@ -563,7 +563,7 @@ mbsalign_unibyte:
+
+ dest = mbs_align_pad (dest, dest_end, start_spaces, padchar);
+ space_left = dest_end - dest;
+- dest = mempcpy (dest, str_to_print, min (n_used_bytes, space_left));
++ dest = mempcpy (dest, str_to_print, umin (n_used_bytes, space_left));
+ mbs_align_pad (dest, dest_end, end_spaces, padchar);
+ }
+ #ifdef HAVE_WIDECHAR
+diff --git a/libfdisk/src/alignment.c b/libfdisk/src/alignment.c
+index 426fa938c..964c66668 100644
+--- a/libfdisk/src/alignment.c
++++ b/libfdisk/src/alignment.c
+@@ -38,7 +38,7 @@
+ */
+ static int lba_is_aligned(struct fdisk_context *cxt, uintmax_t lba)
+ {
+- unsigned long granularity = max(cxt->phy_sector_size, cxt->min_io_size);
++ unsigned long granularity = umax(cxt->phy_sector_size, cxt->min_io_size);
+ uintmax_t offset;
+
+ if (cxt->grain > granularity)
+@@ -54,7 +54,7 @@ static int lba_is_aligned(struct fdisk_context *cxt, uintmax_t lba)
+ */
+ static int lba_is_phy_aligned(struct fdisk_context *cxt, fdisk_sector_t lba)
+ {
+- unsigned long granularity = max(cxt->phy_sector_size, cxt->min_io_size);
++ unsigned long granularity = umax(cxt->phy_sector_size, cxt->min_io_size);
+ uintmax_t offset = (lba * cxt->sector_size) % granularity;
+
+ return !((granularity + cxt->alignment_offset - offset) % granularity);
+@@ -103,7 +103,7 @@ fdisk_sector_t fdisk_align_lba(struct fdisk_context *cxt, fdisk_sector_t lba, in
+ * according the offset to be on the physical boundary.
+ */
+ /* fprintf(stderr, "LBA: %llu apply alignment_offset\n", res); */
+- res -= (max(cxt->phy_sector_size, cxt->min_io_size) -
++ res -= (umax(cxt->phy_sector_size, cxt->min_io_size) -
+ cxt->alignment_offset) / cxt->sector_size;
+
+ if (direction == FDISK_ALIGN_UP && res < lba)
+@@ -396,7 +396,7 @@ int fdisk_apply_user_device_properties(struct fdisk_context *cxt)
+ fdisk_reset_alignment(cxt);
+
+ if (cxt->user_grain) {
+- unsigned long granularity = max(cxt->phy_sector_size, cxt->min_io_size);
++ unsigned long granularity = umax(cxt->phy_sector_size, cxt->min_io_size);
+
+ cxt->grain = cxt->user_grain < granularity ? granularity : cxt->user_grain;
+ DBG(CXT, ul_debugobj(cxt, "new grain: %lu", cxt->grain));
+diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c
+index 56ebb6c1e..879ca53f3 100644
+--- a/libfdisk/src/context.c
++++ b/libfdisk/src/context.c
+@@ -829,7 +829,7 @@ int fdisk_reread_changes(struct fdisk_context *cxt, struct fdisk_table *org)
+ /* the current layout */
+ fdisk_get_partitions(cxt, &tb);
+ /* maximal number of partitions */
+- nparts = max(fdisk_table_get_nents(tb), fdisk_table_get_nents(org));
++ nparts = umax(fdisk_table_get_nents(tb), fdisk_table_get_nents(org));
+
+ while (fdisk_diff_tables(org, tb, &itr, &pa, &change) == 0) {
+ if (change == FDISK_DIFF_UNCHANGED)
+diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c
+index 64a9cd7b3..497e9f00b 100644
+--- a/libfdisk/src/gpt.c
++++ b/libfdisk/src/gpt.c
+@@ -557,7 +557,7 @@ static int gpt_mknew_pmbr(struct fdisk_context *cxt)
+ pmbr->partition_record[0].end_track = 0xFF;
+ pmbr->partition_record[0].starting_lba = cpu_to_le32(1);
+ pmbr->partition_record[0].size_in_lba =
+- cpu_to_le32((uint32_t) min( cxt->total_sectors - 1ULL, 0xFFFFFFFFULL) );
++ cpu_to_le32((uint32_t) umin(cxt->total_sectors - 1ULL, 0xFFFFFFFFULL));
+
+ return 0;
+ }
+@@ -903,7 +903,7 @@ static int valid_pmbr(struct fdisk_context *cxt)
+ /* 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 */
+ pmbr->partition_record[part].size_in_lba =
+- cpu_to_le32((uint32_t) min( cxt->total_sectors - 1ULL, 0xFFFFFFFFULL) );
++ cpu_to_le32((uint32_t) umin(cxt->total_sectors - 1ULL, 0xFFFFFFFFULL));
+ fdisk_label_set_changed(cxt->label, 1);
+ }
+ }
+diff --git a/libsmartcols/src/calculate.c b/libsmartcols/src/calculate.c
+index 9426ebb05..da1ffa8fc 100644
+--- a/libsmartcols/src/calculate.c
++++ b/libsmartcols/src/calculate.c
+@@ -55,7 +55,7 @@ static int count_cell_width(struct libscols_table *tb,
+
+ if (len == (size_t) -1) /* ignore broken multibyte strings */
+ len = 0;
+- cl->width_max = max(len, cl->width_max);
++ cl->width_max = umax(len, cl->width_max);
+
+ if (cl->is_extreme && cl->width_avg && len > cl->width_avg * 2)
+ return 0;
+@@ -64,10 +64,10 @@ static int count_cell_width(struct libscols_table *tb,
+ cl->extreme_sum += len;
+ cl->extreme_count++;
+ }
+- cl->width = max(len, cl->width);
++ cl->width = umax(len, cl->width);
+ if (scols_column_is_tree(cl)) {
+ size_t treewidth = buffer_get_safe_art_size(buf);
+- cl->width_treeart = max(cl->width_treeart, treewidth);
++ cl->width_treeart = umax(cl->width_treeart, treewidth);
+ }
+ return 0;
+ }
+@@ -108,7 +108,7 @@ static int count_column_width(struct libscols_table *tb,
+ }
+ if (scols_cell_get_data(&cl->header)) {
+ size_t len = mbs_safe_width(scols_cell_get_data(&cl->header));
+- cl->width_min = max(cl->width_min, len);
++ cl->width_min = umax(cl->width_min, len);
+ } else
+ no_header = 1;
+
+diff --git a/libsmartcols/src/column.c b/libsmartcols/src/column.c
+index 4b42938f6..81fe76000 100644
+--- a/libsmartcols/src/column.c
++++ b/libsmartcols/src/column.c
+@@ -343,7 +343,7 @@ size_t scols_wrapnl_chunksize(const struct libscols_column *cl __attribute__((un
+ } else
+ sz = mbs_safe_width(data);
+
+- sum = max(sum, sz);
++ sum = umax(sum, sz);
+ data = p;
+ }
+
+--
+2.20.1
+
diff --git a/pkg/util-linux/patch/0006-Revert-lib-loopdev.c-Inline-loopcxt_has_device.patch b/pkg/util-linux/patch/0006-Revert-lib-loopdev.c-Inline-loopcxt_has_device.patch
@@ -0,0 +1,28 @@
+From 91696aa317a78a594ca8ae6e6a810fe778490e6a Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Tue, 18 Jun 2019 22:05:16 +0200
+Subject: [PATCH] Revert "lib/loopdev.c: Inline loopcxt_has_device"
+
+... no caller in that file, this change has no effect.
+
+This reverts commit 3bb960c7b5f1428f1bff885b2667787e8af5001b.
+---
+ lib/loopdev.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/loopdev.c b/lib/loopdev.c
+index ede1b5cdc..99a093926 100644
+--- a/lib/loopdev.c
++++ b/lib/loopdev.c
+@@ -127,7 +127,7 @@ int loopcxt_set_device(struct loopdev_cxt *lc, const char *device)
+ return 0;
+ }
+
+-inline int loopcxt_has_device(struct loopdev_cxt *lc)
++int loopcxt_has_device(struct loopdev_cxt *lc)
+ {
+ return lc && *lc->device;
+ }
+--
+2.20.1
+
diff --git a/pkg/util-linux/ver b/pkg/util-linux/ver
@@ -1 +1 @@
-2.34 r0
+2.34 r1