|
DistroBaker |
2fccc8 |
commit ef1979d8cbfb8ad976de0af21a70f8c0f98fbbe9
|
|
DistroBaker |
2fccc8 |
Author: Tomas Bzatek <tbzatek@redhat.com>
|
|
DistroBaker |
2fccc8 |
Date: Wed Mar 17 18:50:19 2021 +0100
|
|
DistroBaker |
2fccc8 |
|
|
DistroBaker |
2fccc8 |
udiskslinuxfsinfo: Add dosfstools >= 4.2 quirks
|
|
DistroBaker |
2fccc8 |
|
|
DistroBaker |
2fccc8 |
Reverting back the legacy behaviour with no protective (fake) MBR
|
|
DistroBaker |
2fccc8 |
created while making new FAT filesystem on an unpartitioned block device.
|
|
DistroBaker |
2fccc8 |
|
|
DistroBaker |
2fccc8 |
Added a label clear functionality as well.
|
|
DistroBaker |
2fccc8 |
|
|
DistroBaker |
2fccc8 |
diff --git a/src/udiskslinuxfsinfo.c b/src/udiskslinuxfsinfo.c
|
|
DistroBaker |
2fccc8 |
index 15af26c8..f18b9b80 100644
|
|
DistroBaker |
2fccc8 |
--- a/src/udiskslinuxfsinfo.c
|
|
DistroBaker |
2fccc8 |
+++ b/src/udiskslinuxfsinfo.c
|
|
DistroBaker |
2fccc8 |
@@ -21,6 +21,8 @@
|
|
DistroBaker |
2fccc8 |
#include <string.h>
|
|
DistroBaker |
2fccc8 |
#include <glib.h>
|
|
DistroBaker |
2fccc8 |
|
|
DistroBaker |
2fccc8 |
+#include <blockdev/exec.h>
|
|
DistroBaker |
2fccc8 |
+
|
|
DistroBaker |
2fccc8 |
#include "config.h"
|
|
DistroBaker |
2fccc8 |
#include "udiskslinuxfsinfo.h"
|
|
DistroBaker |
2fccc8 |
#include "udisksconfigmanager.h"
|
|
DistroBaker |
2fccc8 |
@@ -236,6 +238,19 @@ const FSInfo _fs_info[] =
|
|
DistroBaker |
2fccc8 |
},
|
|
DistroBaker |
2fccc8 |
};
|
|
DistroBaker |
2fccc8 |
|
|
DistroBaker |
2fccc8 |
+/* workaround for dosfstools >= 4.2 */
|
|
DistroBaker |
2fccc8 |
+static const FSInfo vfat_dosfstools_42 =
|
|
DistroBaker |
2fccc8 |
+ {
|
|
DistroBaker |
2fccc8 |
+ FS_VFAT,
|
|
DistroBaker |
2fccc8 |
+ "fatlabel $DEVICE $LABEL",
|
|
DistroBaker |
2fccc8 |
+ "fatlabel --reset $DEVICE",
|
|
DistroBaker |
2fccc8 |
+ FALSE, /* supports_online_label_rename */
|
|
DistroBaker |
2fccc8 |
+ FALSE, /* supports_owners */
|
|
DistroBaker |
2fccc8 |
+ "mkfs.vfat -I -n $LABEL --mbr=n $DEVICE",
|
|
DistroBaker |
2fccc8 |
+ NULL,
|
|
DistroBaker |
2fccc8 |
+ NULL, /* option_no_discard */
|
|
DistroBaker |
2fccc8 |
+ };
|
|
DistroBaker |
2fccc8 |
+
|
|
DistroBaker |
2fccc8 |
/**
|
|
DistroBaker |
2fccc8 |
* get_fs_info:
|
|
DistroBaker |
2fccc8 |
*
|
|
DistroBaker |
2fccc8 |
@@ -248,6 +263,7 @@ const FSInfo _fs_info[] =
|
|
DistroBaker |
2fccc8 |
const FSInfo *
|
|
DistroBaker |
2fccc8 |
get_fs_info (const gchar *fstype)
|
|
DistroBaker |
2fccc8 |
{
|
|
DistroBaker |
2fccc8 |
+ const FSInfo *info = NULL;
|
|
DistroBaker |
2fccc8 |
guint n;
|
|
DistroBaker |
2fccc8 |
|
|
DistroBaker |
2fccc8 |
g_return_val_if_fail (fstype != NULL, NULL);
|
|
DistroBaker |
2fccc8 |
@@ -255,10 +271,20 @@ get_fs_info (const gchar *fstype)
|
|
DistroBaker |
2fccc8 |
for (n = 0; n < sizeof(_fs_info)/sizeof(FSInfo); n++)
|
|
DistroBaker |
2fccc8 |
{
|
|
DistroBaker |
2fccc8 |
if (strcmp (_fs_info[n].fstype, fstype) == 0)
|
|
DistroBaker |
2fccc8 |
- return &_fs_info[n];
|
|
DistroBaker |
2fccc8 |
+ {
|
|
DistroBaker |
2fccc8 |
+ info = &_fs_info[n];
|
|
DistroBaker |
2fccc8 |
+ break;
|
|
DistroBaker |
2fccc8 |
+ }
|
|
DistroBaker |
2fccc8 |
+ }
|
|
DistroBaker |
2fccc8 |
+
|
|
DistroBaker |
2fccc8 |
+ /* dosfstools >= 4.2 workaround */
|
|
DistroBaker |
2fccc8 |
+ if (g_str_equal (fstype, FS_VFAT) &&
|
|
DistroBaker |
2fccc8 |
+ bd_utils_check_util_version ("mkfs.vfat", "4.2", "--help", "mkfs.fat\\s+([\\d\\.]+).+", NULL))
|
|
DistroBaker |
2fccc8 |
+ {
|
|
DistroBaker |
2fccc8 |
+ info = &vfat_dosfstools_42;
|
|
DistroBaker |
2fccc8 |
}
|
|
DistroBaker |
2fccc8 |
|
|
DistroBaker |
2fccc8 |
- return NULL;
|
|
DistroBaker |
2fccc8 |
+ return info;
|
|
DistroBaker |
2fccc8 |
}
|
|
DistroBaker |
2fccc8 |
|
|
DistroBaker |
2fccc8 |
/**
|