Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Aug 2021 08:21:00 GMT
From:      Piotr Pawel Stefaniak <pstef@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 6558f29ac87a - stable/13 - fstyp: add BeFS support
Message-ID:  <202108280821.17S8L0Ee033572@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by pstef:

URL: https://cgit.FreeBSD.org/src/commit/?id=6558f29ac87acae20689e1f0e950afdc9f37e335

commit 6558f29ac87acae20689e1f0e950afdc9f37e335
Author:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
AuthorDate: 2021-08-17 15:07:31 +0000
Commit:     Piotr Pawel Stefaniak <pstef@FreeBSD.org>
CommitDate: 2021-08-28 08:15:53 +0000

    fstyp: add BeFS support
    
    A simple support for detecting BeFS (BeOS) filesystem
    
    Submitted by:   Miguel Gocobachi
    Differential Revision:  https://reviews.freebsd.org/D29917
    
    (cherry picked from commit 0e92585cde5101506720ca1b904372317b7d84b6)
---
 usr.sbin/fstyp/Makefile            |   2 +-
 usr.sbin/fstyp/befs.c              |  70 +++++++++++++++++++++++++++++++++++++
 usr.sbin/fstyp/fstyp.8             |   4 ++-
 usr.sbin/fstyp/fstyp.c             |   1 +
 usr.sbin/fstyp/fstyp.h             |   1 +
 usr.sbin/fstyp/tests/Makefile      |   1 +
 usr.sbin/fstyp/tests/befs.img.bz2  | Bin 0 -> 132 bytes
 usr.sbin/fstyp/tests/fstyp_test.sh |  11 ++++++
 8 files changed, 88 insertions(+), 2 deletions(-)

diff --git a/usr.sbin/fstyp/Makefile b/usr.sbin/fstyp/Makefile
index 14b5d9dfd9c3..384e2f7dee60 100644
--- a/usr.sbin/fstyp/Makefile
+++ b/usr.sbin/fstyp/Makefile
@@ -3,7 +3,7 @@
 .include <src.opts.mk>
 
 PROG=	fstyp
-SRCS=	apfs.c cd9660.c exfat.c ext2fs.c fstyp.c geli.c hammer.c	\
+SRCS=	apfs.c befs.c cd9660.c exfat.c ext2fs.c fstyp.c geli.c hammer.c	\
 	hammer2.c hfsplus.c msdosfs.c ntfs.c ufs.c
 
 .if ${MK_ZFS} != "no"
diff --git a/usr.sbin/fstyp/befs.c b/usr.sbin/fstyp/befs.c
new file mode 100644
index 000000000000..352fe7d4c296
--- /dev/null
+++ b/usr.sbin/fstyp/befs.c
@@ -0,0 +1,70 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2021 Miguel Gocobachi
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "fstyp.h"
+
+#define B_OS_NAME_LENGTH	32
+#define BEFS_BLOCK_OFFSET	512
+#define BEFS_SUPER_BLOCK_MAGIC1	0x42465331
+
+struct disk_super_block {
+    char	name[B_OS_NAME_LENGTH];
+    int32_t	magic1;
+};
+
+int
+fstyp_befs(FILE *fp, char *label, size_t size)
+{
+	struct disk_super_block *volume;
+
+	volume = read_buf(fp, BEFS_BLOCK_OFFSET, sizeof(*volume));
+
+	if (volume == NULL) {
+		return (1);
+	}
+
+	if (volume->magic1 == BEFS_SUPER_BLOCK_MAGIC1) {
+		strlcpy(label, volume->name, size);
+		free(volume);
+
+		return (0);
+	}
+
+	free(volume);
+
+	return (1);
+}
diff --git a/usr.sbin/fstyp/fstyp.8 b/usr.sbin/fstyp/fstyp.8
index d587e331490f..22d41628d8d5 100644
--- a/usr.sbin/fstyp/fstyp.8
+++ b/usr.sbin/fstyp/fstyp.8
@@ -42,7 +42,7 @@
 The
 .Nm
 utility is used to determine the filesystem type on a given device.
-It can recognize ISO-9660, exFAT, Ext2, FAT, NTFS, and UFS filesystems.
+It can recognize BeFS (BeOS), ISO-9660, exFAT, Ext2, FAT, NTFS, and UFS filesystems.
 When the
 .Fl u
 flag is specified,
@@ -59,6 +59,8 @@ The filesystem name is printed to the standard output
 as, respectively:
 .Bl -item -offset indent -compact
 .It
+befs
+.It
 cd9660
 .It
 exfat
diff --git a/usr.sbin/fstyp/fstyp.c b/usr.sbin/fstyp/fstyp.c
index 46b5d6100011..b39277914aed 100644
--- a/usr.sbin/fstyp/fstyp.c
+++ b/usr.sbin/fstyp/fstyp.c
@@ -64,6 +64,7 @@ static struct {
 	char		*precache_encoding;
 } fstypes[] = {
 	{ "apfs", &fstyp_apfs, true, NULL },
+	{ "befs", &fstyp_befs, false, NULL },
 	{ "cd9660", &fstyp_cd9660, false, NULL },
 	{ "exfat", &fstyp_exfat, false, EXFAT_ENC },
 	{ "ext2fs", &fstyp_ext2fs, false, NULL },
diff --git a/usr.sbin/fstyp/fstyp.h b/usr.sbin/fstyp/fstyp.h
index 73861d7fdc0d..f11d66f5ffc2 100644
--- a/usr.sbin/fstyp/fstyp.h
+++ b/usr.sbin/fstyp/fstyp.h
@@ -50,6 +50,7 @@ char	*checked_strdup(const char *s);
 void	rtrim(char *label, size_t size);
 
 int	fstyp_apfs(FILE *fp, char *label, size_t size);
+int	fstyp_befs(FILE *fp, char *label, size_t size);
 int	fstyp_cd9660(FILE *fp, char *label, size_t size);
 int	fstyp_exfat(FILE *fp, char *label, size_t size);
 int	fstyp_ext2fs(FILE *fp, char *label, size_t size);
diff --git a/usr.sbin/fstyp/tests/Makefile b/usr.sbin/fstyp/tests/Makefile
index 9c4624af3a4c..c821bc9b45eb 100644
--- a/usr.sbin/fstyp/tests/Makefile
+++ b/usr.sbin/fstyp/tests/Makefile
@@ -4,6 +4,7 @@ PACKAGE=	tests
 
 ATF_TESTS_SH=	fstyp_test
 
+${PACKAGE}FILES+=	befs.img.bz2
 ${PACKAGE}FILES+=	dfr-01-xfat.img.bz2
 ${PACKAGE}FILES+=	ext2.img.bz2
 ${PACKAGE}FILES+=	ext3.img.bz2
diff --git a/usr.sbin/fstyp/tests/befs.img.bz2 b/usr.sbin/fstyp/tests/befs.img.bz2
new file mode 100644
index 000000000000..c2a6693216d5
Binary files /dev/null and b/usr.sbin/fstyp/tests/befs.img.bz2 differ
diff --git a/usr.sbin/fstyp/tests/fstyp_test.sh b/usr.sbin/fstyp/tests/fstyp_test.sh
index 8f76424f5f75..81a549629dd7 100755
--- a/usr.sbin/fstyp/tests/fstyp_test.sh
+++ b/usr.sbin/fstyp/tests/fstyp_test.sh
@@ -27,6 +27,16 @@
 
 # $FreeBSD$
 
+atf_test_case befs
+befs_head() {
+	atf_set "descr" "fstyp(8) can detect BeFS and label filesystem"
+}
+befs_body() {
+	bzcat $(atf_get_srcdir)/befs.img.bz2 > befs.img
+	atf_check -s exit:0 -o inline:"befs\n" fstyp befs.img
+	atf_check -s exit:0 -o inline:"befs BeFS\n" fstyp -l befs.img
+}
+
 atf_test_case cd9660
 cd9660_head() {
 	atf_set "descr" "fstyp(8) should detect cd9660 filesystems"
@@ -257,6 +267,7 @@ zeros_body() {
 
 
 atf_init_test_cases() {
+	atf_add_test_case befs
 	atf_add_test_case cd9660
 	atf_add_test_case cd9660_label
 	atf_add_test_case dir



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202108280821.17S8L0Ee033572>