Blob Blame History Raw
diff -Naur a/manpages/fatlabel.8.in b/manpages/fatlabel.8.in
--- a/manpages/fatlabel.8.in	2021-01-31 04:49:12.000000000 -0800
+++ b/manpages/fatlabel.8.in	2022-10-20 10:39:36.449439626 -0700
@@ -51,6 +51,8 @@
 .IP "\fB-c\fP \fIPAGE\fP, \fB\-\-codepage\fP=\fIPAGE\fP" 4
 Use DOS codepage \fIPAGE\fP to encode/decode label.
 By default codepage 850 is used.
+.IP "\fB\-\-skip-name-validation\fP" 4
+Do not validate filesystem label.
 .IP "\fB\-h\fP, \fB\-\-help\fP" 4
 Display a help message and terminate.
 .IP "\fB\-V\fP, \fB\-\-version\fP" 4
diff -Naur a/manpages/mkfs.fat.8.in b/manpages/mkfs.fat.8.in
--- a/manpages/mkfs.fat.8.in	2021-01-31 04:49:12.000000000 -0800
+++ b/manpages/mkfs.fat.8.in	2022-10-20 10:39:36.449439626 -0700
@@ -218,6 +218,8 @@
 Multiple runs of \fBmkfs.fat\fP on the same device create identical results
 with this option.
 Its main purpose is testing \fBmkfs.fat\fP.
+.IP "\fB\-\-skip-name-validation\fP" 4
+Do not validate filesystem label.
 .\" ----------------------------------------------------------------------------
 .SH BUGS
 \fBmkfs.fat\fP can not create boot-able filesystems.
diff -Naur a/src/common.c b/src/common.c
--- a/src/common.c	2021-01-31 04:49:12.000000000 -0800
+++ b/src/common.c	2022-10-20 10:39:36.450439587 -0700
@@ -42,6 +42,7 @@
 int interactive;
 int write_immed;
 int atari_format;
+int skip_name_validation;
 const char *program_name;
 
 
@@ -327,6 +328,9 @@
     int ret = 0;
     wchar_t wlabel[12];
 
+    if (skip_name_validation)
+        return 0;
+
     if (dos_string_to_wchar_string(wlabel, doslabel, sizeof(wlabel))) {
         for (i = 0; wlabel[i]; i++) {
             /* FAT specification: Lower case characters are not allowed in DIR_Name
diff -Naur a/src/common.h b/src/common.h
--- a/src/common.h	2021-01-31 04:49:12.000000000 -0800
+++ b/src/common.h	2022-10-20 10:39:36.450439587 -0700
@@ -35,6 +35,7 @@
 extern int interactive;
 extern int write_immed;
 extern int atari_format;	/* Use Atari variation of MS-DOS FS format */
+extern int skip_name_validation;
 
 /* program_name used for printing messages; no name will be printed when it is
  * left as NULL */
diff -Naur a/src/fatlabel.c b/src/fatlabel.c
--- a/src/fatlabel.c	2021-01-31 04:49:12.000000000 -0800
+++ b/src/fatlabel.c	2022-10-20 10:39:36.451439549 -0700
@@ -195,21 +195,24 @@
     fprintf(f, "existing label or serial if NEW is not given.\n");
     fprintf(f, "\n");
     fprintf(f, "Options:\n");
-    fprintf(f, "  -i, --volume-id     Work on serial number instead of label\n");
-    fprintf(f, "  -r, --reset         Remove label or generate new serial number\n");
-    fprintf(f, "  -c N, --codepage=N  use DOS codepage N to encode/decode label (default: %d)\n", DEFAULT_DOS_CODEPAGE);
-    fprintf(f, "  -V, --version       Show version number and terminate\n");
-    fprintf(f, "  -h, --help          Print this message and terminate\n");
+    fprintf(f, "  -i, --volume-id        Work on serial number instead of label\n");
+    fprintf(f, "  -r, --reset            Remove label or generate new serial number\n");
+    fprintf(f, "  -c N, --codepage=N     use DOS codepage N to encode/decode label (default: %d)\n", DEFAULT_DOS_CODEPAGE);
+    fprintf(f, "  --skip-name-validation Do not validate filesystem label\n");
+    fprintf(f, "  -V, --version          Show version number and terminate\n");
+    fprintf(f, "  -h, --help             Print this message and terminate\n");
     exit(status);
 }
 
 
 int main(int argc, char *argv[])
 {
+    enum {OPT_SKIP_NAME_VALIDATION=1000};
     const struct option long_options[] = {
 	{"volume-id", no_argument, NULL, 'i'},
 	{"reset",     no_argument, NULL, 'r'},
 	{"codepage",  required_argument, NULL, 'c'},
+	{"skip-name-validation", optional_argument, NULL, OPT_SKIP_NAME_VALIDATION},
 	{"version",   no_argument, NULL, 'V'},
 	{"help",      no_argument, NULL, 'h'},
 	{0,}
@@ -246,6 +249,10 @@
 		    usage(1, 0);
 		break;
 
+	    case OPT_SKIP_NAME_VALIDATION:
+		skip_name_validation = 1;
+		break;
+
 	    case 'V':
 		printf("fatlabel " VERSION " (" VERSION_DATE ")\n");
 		exit(0);
diff -Naur a/src/mkfs.fat.c b/src/mkfs.fat.c
--- a/src/mkfs.fat.c	2021-01-31 04:49:12.000000000 -0800
+++ b/src/mkfs.fat.c	2022-10-20 10:41:34.018323059 -0700
@@ -1454,6 +1454,7 @@
     fprintf(stderr, "  -S SIZE         Select a sector size of SIZE (a power of two, at least 512)\n");
     fprintf(stderr, "  -v              Verbose execution\n");
     fprintf(stderr, "  --variant=TYPE  Select variant TYPE of filesystem (standard or Atari)\n");
+    fprintf(stderr, "  --skip-name-validation Do not validate filesystem label\n");
     fprintf(stderr, "\n");
     fprintf(stderr, "  --invariant     Use constants for randomly generated or time based values\n");
     fprintf(stderr, "  --offset=SECTOR Write the filesystem at a specific sector into the device file.\n");
@@ -1478,14 +1479,15 @@
     struct timeval create_timeval;
     long long conversion;
 
-    enum {OPT_HELP=1000, OPT_INVARIANT, OPT_MBR, OPT_VARIANT, OPT_CODEPAGE, OPT_OFFSET};
+    enum {OPT_HELP=1000, OPT_INVARIANT, OPT_MBR, OPT_VARIANT, OPT_CODEPAGE, OPT_OFFSET, OPT_SKIP_NAME_VALIDATION};
     const struct option long_options[] = {
-	    {"codepage",  required_argument, NULL, OPT_CODEPAGE},
-	    {"invariant", no_argument,       NULL, OPT_INVARIANT},
-	    {"mbr",       optional_argument, NULL, OPT_MBR},
-	    {"variant",   required_argument, NULL, OPT_VARIANT},
-	    {"offset",    required_argument, NULL, OPT_OFFSET},
-	    {"help",      no_argument,       NULL, OPT_HELP},
+	    {"codepage",             required_argument, NULL, OPT_CODEPAGE},
+	    {"invariant",            no_argument,       NULL, OPT_INVARIANT},
+	    {"mbr",                  optional_argument, NULL, OPT_MBR},
+	    {"variant",              required_argument, NULL, OPT_VARIANT},
+	    {"offset",               required_argument, NULL, OPT_OFFSET},
+	    {"skip-name-validation", optional_argument, NULL, OPT_SKIP_NAME_VALIDATION},
+	    {"help",                 no_argument,       NULL, OPT_HELP},
 	    {0,}
     };
 
@@ -1813,6 +1815,10 @@
         part_sector = (off_t) conversion;
         break;
 
+	case OPT_SKIP_NAME_VALIDATION:
+		skip_name_validation = 1;
+		break;
+
 	case '?':
 	    usage(argv[0], 1);
 	    exit(1);