From d0a3c60a0b21c3575d6b598ae14d516fbfb9e0f9 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Fri, 6 Nov 2009 02:23:20 +0100 Subject: [PATCH] Add support for ReiserFS --- src/devkit-disks-daemon.c | 16 ++++++++++++++++ src/job-change-filesystem-label.c | 5 +++++ src/job-mkfs.c | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 0 deletions(-) diff --git a/src/devkit-disks-daemon.c b/src/devkit-disks-daemon.c index 5fcad3c..cf54fff 100644 --- a/src/devkit-disks-daemon.c +++ b/src/devkit-disks-daemon.c @@ -299,6 +299,22 @@ static const DevkitDisksFilesystem known_file_systems[] = { FALSE, /* supports_online_resize_shrink */ }, { + "reiserfs", /* id */ + "ReiserFS", /* name */ + TRUE, /* supports_unix_owners */ + TRUE, /* can_mount */ + TRUE, /* can_create */ + 16, /* max_label_len */ + TRUE, /* supports_label_rename */ + FALSE, /* supports_online_label_rename*/ + TRUE, /* supports_fsck */ + FALSE, /* supports_online_fsck */ + TRUE, /* supports_resize_enlarge */ + TRUE, /* supports_online_resize_enlarge */ + TRUE, /* supports_resize_shrink */ + FALSE, /* supports_online_resize_shrink */ + }, + { "minix", /* id */ "Minix", /* name */ TRUE, /* supports_unix_owners */ diff --git a/src/job-change-filesystem-label.c b/src/job-change-filesystem-label.c index d21bcb4..520cd8b 100644 --- a/src/job-change-filesystem-label.c +++ b/src/job-change-filesystem-label.c @@ -76,6 +76,11 @@ main (int argc, char **argv) else command_line = g_strdup_printf ("xfs_admin -L \"%s\" %s", new_label, device); + } else if (strcmp (fstype, "reiserfs") == 0) { + if (!validate_and_escape_label (&new_label, 16)) + goto out; + command_line = g_strdup_printf ("reiserfstune -l \"%s\" %s", new_label, device); + } else if (strcmp (fstype, "vfat") == 0) { if (!validate_and_escape_label (&new_label, 254)) goto out; diff --git a/src/job-mkfs.c b/src/job-mkfs.c index 15f0971..d1b856b 100644 --- a/src/job-mkfs.c +++ b/src/job-mkfs.c @@ -191,6 +191,39 @@ main (int argc, char **argv) g_string_append_printf (s, " %s", device); command_line = g_string_free (s, FALSE); + } else if (strcmp (fstype, "reiserfs") == 0) { + + s = g_string_new ("mkfs.reiserfs -q"); + for (n = 0; options[n] != NULL; n++) { + if (g_str_has_prefix (options[n], "label=")) { + label = strdup (options[n] + sizeof ("label=") - 1); + if (!validate_and_escape_label (&label, 16)) { + g_string_free (s, TRUE); + goto out; + } + g_string_append_printf (s, " -l \"%s\"", label); + g_free (label); + label = NULL; + } else if (g_str_has_prefix (options[n], "take_ownership_uid=")) { + take_ownership_uid = strtol (options[n] + sizeof ("take_ownership_uid=") - 1, &endp, 10); + if (endp == NULL || *endp != '\0') { + g_printerr ("option %s is malformed\n", options[n]); + goto out; + } + } else if (g_str_has_prefix (options[n], "take_ownership_gid=")) { + take_ownership_gid = strtol (options[n] + sizeof ("take_ownership_gid=") - 1, &endp, 10); + if (endp == NULL || *endp != '\0') { + g_printerr ("option %s is malformed\n", options[n]); + goto out; + } + } else { + g_printerr ("option %s not supported\n", options[n]); + goto out; + } + } + g_string_append_printf (s, " %s", device); + command_line = g_string_free (s, FALSE); + } else if (strcmp (fstype, "ntfs") == 0) { /* skip zeroing (we do that ourselves) and bad sector checking (will -- 1.6.5.2