pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

fuse-exfat: Test version 1.4.0



Module Name:	pkgsrc-wip
Committed By:	Jason W. Bacon <bacon%NetBSD.org@localhost>
Pushed By:	outpaddling
Date:		Wed Jul 5 09:05:45 2023 -0500
Changeset:	b123349cf495d0aa48defa1567dcdb31f981449f

Modified Files:
	Makefile
Added Files:
	fuse-exfat/DESCR
	fuse-exfat/Makefile
	fuse-exfat/PLIST
	fuse-exfat/distinfo
	fuse-exfat/patches/patch-configure.ac
	fuse-exfat/patches/patch-libexfat__Makefile.am
	fuse-exfat/patches/patch-libexfat__nbpartutil.c
	fuse-exfat/patches/patch-libexfat__nbpartutil.h

Log Message:
fuse-exfat: Test version 1.4.0

1.3.0 does not seem to produce working filesystems on NetBSD

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=b123349cf495d0aa48defa1567dcdb31f981449f

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 Makefile                                        |   1 +
 fuse-exfat/DESCR                                |   3 +
 fuse-exfat/Makefile                             |  23 +++
 fuse-exfat/PLIST                                |  16 ++
 fuse-exfat/distinfo                             |   9 ++
 fuse-exfat/patches/patch-configure.ac           |  15 ++
 fuse-exfat/patches/patch-libexfat__Makefile.am  |  14 ++
 fuse-exfat/patches/patch-libexfat__nbpartutil.c | 205 ++++++++++++++++++++++++
 fuse-exfat/patches/patch-libexfat__nbpartutil.h |  50 ++++++
 9 files changed, 336 insertions(+)

diffs:
diff --git a/Makefile b/Makefile
index d0e4eefc9a..52dc15447a 100644
--- a/Makefile
+++ b/Makefile
@@ -962,6 +962,7 @@ SUBDIR+=	fswatch
 SUBDIR+=	ft8-lib
 SUBDIR+=	ftpsesame
 SUBDIR+=	fuse-cryfs
+SUBDIR+=	fuse-exfat
 SUBDIR+=	fuse-google-drive-git
 SUBDIR+=	fuse-mp3fs
 SUBDIR+=	fuse-smbnetfs
diff --git a/fuse-exfat/DESCR b/fuse-exfat/DESCR
new file mode 100644
index 0000000000..87363fa225
--- /dev/null
+++ b/fuse-exfat/DESCR
@@ -0,0 +1,3 @@
+This project aims to provide a full-featured exFAT file system
+implementation for Unix-like systems. It consists of a FUSE module
+(fuse-exfat) and a set of utilities (exfat-utils).
diff --git a/fuse-exfat/Makefile b/fuse-exfat/Makefile
new file mode 100644
index 0000000000..a42386493c
--- /dev/null
+++ b/fuse-exfat/Makefile
@@ -0,0 +1,23 @@
+# $NetBSD: Makefile,v 1.3 2022/10/06 00:51:49 perseant Exp $
+
+DISTNAME=	fuse-exfat-1.4.0
+CATEGORIES=	filesystems
+MASTER_SITES=	${MASTER_SITE_GITHUB:=relan/}
+GITHUB_PROJECT=	exfat
+GITHUB_TAG=	v${PKGVERSION_NOREV}
+
+MAINTAINER=	bacon%NetBSD.org@localhost
+HOMEPAGE=	https://github.com/relan/exfat
+COMMENT=	FUSE file-system and utilities for exFAT file systems
+LICENSE=	gnu-gpl-v2
+
+
+USE_LANGUAGES=	c c++
+GNU_CONFIGURE=	yes
+USE_TOOLS+=	autoheader automake autoreconf gmake pkg-config
+
+post-patch:
+	cd ${WRKSRC} && autoreconf -fiv
+
+.include "../../mk/fuse.buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/fuse-exfat/PLIST b/fuse-exfat/PLIST
new file mode 100644
index 0000000000..172014caf0
--- /dev/null
+++ b/fuse-exfat/PLIST
@@ -0,0 +1,16 @@
+@comment $NetBSD$
+man/man8/dumpexfat.8
+man/man8/exfatattrib.8
+man/man8/exfatfsck.8
+man/man8/exfatlabel.8
+man/man8/mkexfatfs.8
+man/man8/mount.exfat-fuse.8
+sbin/dumpexfat
+sbin/exfatattrib
+sbin/exfatfsck
+sbin/exfatlabel
+sbin/fsck.exfat
+sbin/mkexfatfs
+sbin/mkfs.exfat
+sbin/mount.exfat
+sbin/mount.exfat-fuse
diff --git a/fuse-exfat/distinfo b/fuse-exfat/distinfo
new file mode 100644
index 0000000000..8a8fe099b1
--- /dev/null
+++ b/fuse-exfat/distinfo
@@ -0,0 +1,9 @@
+$NetBSD$
+
+BLAKE2s (fuse-exfat-1.4.0.tar.gz) = 327585eaa7b56a05fe24b339bd0a9bd95f9d1e11348104ff17f06c8c33ac08bd
+SHA512 (fuse-exfat-1.4.0.tar.gz) = 70a951c878e3eb9173c8bc24908da1a64e4e83990b4ae3bb53a9f20e9d618f30ef7e93e818f0387fe9a76a87c8ba970aa2d8728c386865fe658d76c1bee830ae
+Size (fuse-exfat-1.4.0.tar.gz) = 62390 bytes
+SHA1 (patch-configure.ac) = ff8ebb0672020434db45d477898d7656fbd8ab12
+SHA1 (patch-libexfat__Makefile.am) = a1a4a6c83eac6364fef0ad4fe1fa788feececf91
+SHA1 (patch-libexfat__nbpartutil.c) = 24b4062543afc864230e28cd667ada06a3a35052
+SHA1 (patch-libexfat__nbpartutil.h) = 0e87652c054314eabeafc1cbed76cbe0a933735e
diff --git a/fuse-exfat/patches/patch-configure.ac b/fuse-exfat/patches/patch-configure.ac
new file mode 100644
index 0000000000..0017048a4e
--- /dev/null
+++ b/fuse-exfat/patches/patch-configure.ac
@@ -0,0 +1,15 @@
+$NetBSD$
+
+# Portability
+
+--- configure.ac.orig	2023-07-05 13:45:39.933803250 +0000
++++ configure.ac
+@@ -47,6 +47,8 @@ case "$host_os" in
+     AC_DEFINE([_DEFAULT_SOURCE], [], [Enable vsyslog().])
+ 	;;
+ esac
++AC_CHECK_LIB(util, opendisk)
++AC_CHECK_LIB(prop, prop_dictionary_get_int64)
+ AC_CONFIG_HEADERS([libexfat/config.h])
+ AC_CONFIG_FILES([
+ 	libexfat/Makefile
diff --git a/fuse-exfat/patches/patch-libexfat__Makefile.am b/fuse-exfat/patches/patch-libexfat__Makefile.am
new file mode 100644
index 0000000000..79472337e3
--- /dev/null
+++ b/fuse-exfat/patches/patch-libexfat__Makefile.am
@@ -0,0 +1,14 @@
+$NetBSD: patch-libexfat__Makefile.am,v 1.1 2022/10/06 00:51:49 perseant Exp $
+
+Add new file containing NetBSD disk sizing routine.
+
+--- libexfat/Makefile.am	2022-09-27 10:01:50.915736384 -0700
++++ libexfat/Makefile.am	2022-09-27 10:02:11.320568581 -0700
+@@ -32,6 +32,7 @@
+ 	lookup.c \
+ 	mount.c \
+ 	node.c \
++	nbpartutil.c \
+ 	platform.h \
+ 	repair.c \
+ 	time.c \
diff --git a/fuse-exfat/patches/patch-libexfat__nbpartutil.c b/fuse-exfat/patches/patch-libexfat__nbpartutil.c
new file mode 100644
index 0000000000..a64241f382
--- /dev/null
+++ b/fuse-exfat/patches/patch-libexfat__nbpartutil.c
@@ -0,0 +1,205 @@
+$NetBSD: patch-libexfat__nbpartutil.c,v 1.1 2022/10/06 00:51:49 perseant Exp $
+
+Supply the partition utility code from NetBSD newfs.
+Only compiled if __NetBSD__ is defined.
+
+--- libexfat/nbpartutil.c	2022-09-27 10:20:12.769075968 -0700
++++ libexfat/nbpartutil.c	2022-09-27 10:09:39.285740643 -0700
+@@ -0,0 +1,197 @@
++#ifdef __NetBSD__
++/*	NetBSD: partutil.c,v 1.15.18.2 2021/01/09 19:30:14 martin Exp 	*/
++
++/*-
++ * Copyright (c) 2006 The NetBSD Foundation, Inc.
++ * All rights reserved.
++ *
++ * This code is derived from software contributed to The NetBSD Foundation
++ * by Christos Zoulas.
++ *
++ * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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>
++
++#include <sys/types.h>
++#include <sys/param.h>
++#include <sys/disklabel.h>
++#include <sys/disk.h>
++#include <sys/ioctl.h>
++#include <sys/stat.h>
++
++
++#include <disktab.h>
++#include <err.h>
++#include <errno.h>
++#include <fcntl.h>
++#include <util.h>
++#include <unistd.h>
++#include <stdlib.h>
++#include <string.h>
++
++#include <prop/proplib.h>
++
++#include "nbpartutil.h"
++
++/*
++ * Convert disklabel geometry info to disk_geom.
++ */
++static void
++label2geom(struct disk_geom *geo, const struct disklabel *lp)
++{
++	geo->dg_secperunit = lp->d_secperunit;
++	geo->dg_secsize = lp->d_secsize;
++	geo->dg_nsectors = lp->d_nsectors;
++	geo->dg_ntracks = lp->d_ntracks;
++	geo->dg_ncylinders = lp->d_ncylinders;
++	geo->dg_secpercyl = lp->d_secpercyl;
++	geo->dg_pcylinders = lp->d_ncylinders;
++	geo->dg_sparespertrack = lp->d_sparespertrack;
++	geo->dg_sparespercyl = lp->d_sparespercyl;
++	geo->dg_acylinders = lp->d_acylinders;
++}
++
++/*
++ * Set what we need to know about disk geometry.
++ */
++static void
++dict2geom(struct disk_geom *geo, prop_dictionary_t dict)
++{
++	(void)memset(geo, 0, sizeof(struct disk_geom));
++	prop_dictionary_get_int64(dict, "sectors-per-unit",
++	    &geo->dg_secperunit);
++	prop_dictionary_get_uint32(dict, "sector-size", &geo->dg_secsize);
++	prop_dictionary_get_uint32(dict, "sectors-per-track",
++	    &geo->dg_nsectors);
++	prop_dictionary_get_uint32(dict, "tracks-per-cylinder",
++	    &geo->dg_ntracks);
++	prop_dictionary_get_uint32(dict, "cylinders-per-unit",
++	    &geo->dg_ncylinders);
++}
++
++
++int
++getdiskinfo(const char *s, int fd, const char *dt, struct disk_geom *geo,
++    struct dkwedge_info *dkw)
++{
++	struct disklabel lab;
++	struct disklabel *lp = &lab;
++	prop_dictionary_t disk_dict, geom_dict;
++	struct stat sb;
++	const struct partition *pp;
++	int ptn, error;
++
++	if (dt) {
++		lp = getdiskbyname(dt);
++		if (lp == NULL)
++			errx(1, "unknown disk type `%s'", dt);
++	}
++
++	/* Get disk description dictionary */
++	disk_dict = NULL;
++	error = prop_dictionary_recv_ioctl(fd, DIOCGDISKINFO, &disk_dict);
++
++	/* fail quickly if the device does not exist at all */
++	if (error == ENXIO)
++		return -1;
++
++	if (error) {
++		/*
++		 * Ask for disklabel if DIOCGDISKINFO failed. This is
++		 * compatibility call and can be removed when all devices
++		 * will support DIOCGDISKINFO.
++		 * cgd, ccd pseudo disk drives doesn't support DIOCGDDISKINFO
++		 */
++		if (ioctl(fd, DIOCGDINFO, lp) == -1) {
++			if (errno != ENXIO)
++				warn("DIOCGDINFO on %s failed", s);
++			return -1;
++		}
++		label2geom(geo, lp);
++	} else {
++		geom_dict = prop_dictionary_get(disk_dict, "geometry");
++		dict2geom(geo, geom_dict);
++	}
++	if (disk_dict != NULL)
++		prop_object_release(disk_dict);
++
++	if (dkw == NULL)
++		return 0;
++
++	/* Get info about partition/wedge */
++	if (ioctl(fd, DIOCGWEDGEINFO, dkw) != -1) {
++		/* DIOCGWEDGEINFO didn't fail, we're done */
++		return 0;
++	}
++
++	if (ioctl(fd, DIOCGDINFO, lp) == -1) {
++		err(1, "Please implement DIOCGWEDGEINFO or "
++		    "DIOCGDINFO for disk device %s", s);
++	}
++
++	/* DIOCGDINFO didn't fail */
++	(void)memset(dkw, 0, sizeof(*dkw));
++
++	if (stat(s, &sb) == -1)
++		return 0;
++
++	ptn = strchr(s, '\0')[-1] - 'a';
++	if ((unsigned)ptn >= lp->d_npartitions ||
++	    (devminor_t)ptn != DISKPART(sb.st_rdev))
++		return 0;
++
++	pp = &lp->d_partitions[ptn];
++	if (ptn != getrawpartition()) {
++		dkw->dkw_offset = pp->p_offset;
++		dkw->dkw_size = pp->p_size;
++	} else {
++		dkw->dkw_offset = 0;
++		dkw->dkw_size = geo->dg_secperunit;
++	}
++	dkw->dkw_parent[0] = '*';
++	strlcpy(dkw->dkw_ptype, getfstypename(pp->p_fstype),
++	    sizeof(dkw->dkw_ptype));
++
++	return 0;
++}
++
++int
++getdisksize(const char *name, u_int *secsize, off_t *mediasize)
++{
++	char buf[MAXPATHLEN];
++	struct disk_geom geo;
++	int fd, error;
++
++	if ((fd = opendisk(name, O_RDONLY, buf, sizeof(buf), 0)) == -1)
++		return -1;
++
++	error = getdiskinfo(name, fd, NULL, &geo, NULL);
++	close(fd);
++	if (error)
++		return error;
++
++	*secsize = geo.dg_secsize;
++	*mediasize = geo.dg_secsize * geo.dg_secperunit;
++	return 0;
++}
++#endif /* __NetBSD__ */
diff --git a/fuse-exfat/patches/patch-libexfat__nbpartutil.h b/fuse-exfat/patches/patch-libexfat__nbpartutil.h
new file mode 100644
index 0000000000..ebe393c16c
--- /dev/null
+++ b/fuse-exfat/patches/patch-libexfat__nbpartutil.h
@@ -0,0 +1,50 @@
+$NetBSD: patch-libexfat__nbpartutil.h,v 1.1 2022/10/06 00:51:49 perseant Exp $
+
+Supply the partition utility code from NetBSD newfs.
+Only compiled if __NetBSD__ is defined.
+
+--- libexfat/nbpartutil.h	2022-09-27 10:20:12.769075968 -0700
++++ libexfat/nbpartutil.h	2022-09-27 10:09:39.310695167 -0700
+@@ -0,0 +1,42 @@
++/*	NetBSD: partutil.h,v 1.3 2014/12/29 16:27:43 christos Exp 	*/
++
++/*-
++ * Copyright (c) 2006 The NetBSD Foundation, Inc.
++ * All rights reserved.
++ *
++ * This code is derived from software contributed to The NetBSD Foundation
++ * by Christos Zoulas.
++ *
++ * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
++ */
++#ifndef _PARTUTIL_H_
++#define _PARTUTIL_H_
++
++__BEGIN_DECLS
++struct dkwedge_info;
++struct disk_geom;
++int getdiskinfo(const char *, int, const char *,
++    struct disk_geom *, struct dkwedge_info *);
++int getdisksize(const char *, u_int *, off_t *);
++__END_DECLS
++
++#endif /* _PARTUTIL_H_ */


Home | Main Index | Thread Index | Old Index