[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
07/09: file-systems: Add support for FAT16.
From: |
Ludovic Courtès |
Subject: |
07/09: file-systems: Add support for FAT16. |
Date: |
Wed, 11 Oct 2017 05:12:50 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit 88235675fce40d619850ac9bd676d86e42acb8b8
Author: Ludovic Courtès <address@hidden>
Date: Wed Oct 4 08:50:40 2017 +0200
file-systems: Add support for FAT16.
* gnu/build/file-systems.scm (check-fat32-file-system): Rename to...
(check-fat-file-system): ... this.
(check-file-system): Adjust accordingly.
(fat16-superblock?, read-fat16-superblock)
(fat16-superblock-uuid, fat16-superblock-volume-name): New procedures.
(%partition-label-readers, %partition-uuid-readers): Add FAT16.
---
gnu/build/file-systems.scm | 39 +++++++++++++++++++++++++++++++++++----
1 file changed, 35 insertions(+), 4 deletions(-)
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index 093f60d..3e516a4 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -194,7 +194,7 @@ if DEVICE does not contain a btrfs file system."
Trailing spaces are trimmed."
(string-trim-right (latin1->string (sub-bytevector sblock 71 11) (lambda (c)
#f)) #\space))
-(define (check-fat32-file-system device)
+(define (check-fat-file-system device)
"Return the health of a fat file system on DEVICE."
(match (status:exit-val
(system* "fsck.vfat" "-v" "-a" device))
@@ -204,6 +204,33 @@ Trailing spaces are trimmed."
;;;
+;;; FAT16 file systems.
+;;;
+
+(define (fat16-superblock? sblock)
+ "Return #t when SBLOCK is a fat16 boot record."
+ (bytevector=? (sub-bytevector sblock 54 8)
+ (string->utf8 "FAT16 ")))
+
+(define (read-fat16-superblock device)
+ "Return the raw contents of DEVICE's fat16 superblock as a bytevector, or
+#f if DEVICE does not contain a fat16 file system."
+ (read-superblock device 0 62 fat16-superblock?))
+
+(define (fat16-superblock-uuid sblock)
+ "Return the Volume ID of a fat superblock SBLOCK as a 4-byte bytevector."
+ (sub-bytevector sblock 39 4))
+
+(define (fat16-superblock-volume-name sblock)
+ "Return the volume name of SBLOCK as a string of at most 11 characters, or
+#f if SBLOCK has no volume name. The volume name is a latin1 string.
+Trailing spaces are trimmed."
+ (string-trim-right (latin1->string (sub-bytevector sblock 43 11)
+ (lambda (c) #f))
+ #\space))
+
+
+;;;
;;; ISO9660 file systems.
;;;
@@ -386,7 +413,9 @@ partition field reader that returned a value."
(partition-field-reader read-btrfs-superblock
btrfs-superblock-volume-name)
(partition-field-reader read-fat32-superblock
- fat32-superblock-volume-name)))
+ fat32-superblock-volume-name)
+ (partition-field-reader read-fat16-superblock
+ fat16-superblock-volume-name)))
(define %partition-uuid-readers
(list (partition-field-reader read-iso9660-superblock
@@ -396,7 +425,9 @@ partition field reader that returned a value."
(partition-field-reader read-btrfs-superblock
btrfs-superblock-uuid)
(partition-field-reader read-fat32-superblock
- fat32-superblock-uuid)))
+ fat32-superblock-uuid)
+ (partition-field-reader read-fat16-superblock
+ fat16-superblock-uuid)))
(define read-partition-label
(cut read-partition-field <> %partition-label-readers))
@@ -511,7 +542,7 @@ the following:
(cond
((string-prefix? "ext" type) check-ext2-file-system)
((string-prefix? "btrfs" type) check-btrfs-file-system)
- ((string-suffix? "fat" type) check-fat32-file-system)
+ ((string-suffix? "fat" type) check-fat-file-system)
(else #f)))
(if check-procedure
- branch master updated (22d1060 -> 50fcf37), Ludovic Courtès, 2017/10/11
- 03/09: gnu: Add xyce-parallel., Ludovic Courtès, 2017/10/11
- 08/09: uuid: Change "fat32" to "fat"., Ludovic Courtès, 2017/10/11
- 01/09: gnu: Add lapack-3.5., Ludovic Courtès, 2017/10/11
- 02/09: gnu: Add xyce-serial., Ludovic Courtès, 2017/10/11
- 04/09: gnu: Add freehdl., Ludovic Courtès, 2017/10/11
- 06/09: file-systems: Preserve UUID types when serializing., Ludovic Courtès, 2017/10/11
- 07/09: file-systems: Add support for FAT16.,
Ludovic Courtès <=
- 09/09: doc: Give an example with a FAT UUID., Ludovic Courtès, 2017/10/11
- 05/09: file-systems: 'mount-file-system' now takes a <file-system> object., Ludovic Courtès, 2017/10/11