Module Name: src
Committed By: pho
Date: Sat Dec 4 06:42:39 UTC 2021
Modified Files:
src/lib/librefuse: Makefile fuse.h refuse.c refuse_lowlevel.c
refuse_opt.c
src/sbin/mount_qemufwcfg: Makefile fwcfg.c
src/tests/lib/librefuse: t_refuse_opt.c
src/usr.sbin/perfused: perfused.h
Added Files:
src/lib/librefuse: fuse_internal.h
Log Message:
librefuse: Preparation of a proper API versioning; no more #ifdef woes in user
code
The goal is to fully support FUSE API version 3.0 while maintaining
API/ABI compatibility with code written for 2.6 (or even older).
* <fuse.h> now emits a compiler warning if it's included without
defining FUSE_USE_VERSION. It had been silently defaulted to the
latest supported version prior to this change. This is permissive
compared to the original FUSE, as it emits an error instead.
* <fuse.h> now emits a warning if FUSE_USE_VERSION is higher than what
can be provided.
* Added a macro FUSE_MAKE_VERSION(maj, min). It was missing from
librefuse <fuse.h>.
No actual API updates have been made (yet).
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/lib/librefuse/Makefile
cvs rdiff -u -r1.23 -r1.24 src/lib/librefuse/fuse.h
cvs rdiff -u -r0 -r1.1 src/lib/librefuse/fuse_internal.h
cvs rdiff -u -r1.102 -r1.103 src/lib/librefuse/refuse.c
cvs rdiff -u -r1.1 -r1.2 src/lib/librefuse/refuse_lowlevel.c
cvs rdiff -u -r1.21 -r1.22 src/lib/librefuse/refuse_opt.c
cvs rdiff -u -r1.4 -r1.5 src/sbin/mount_qemufwcfg/Makefile
cvs rdiff -u -r1.5 -r1.6 src/sbin/mount_qemufwcfg/fwcfg.c
cvs rdiff -u -r1.8 -r1.9 src/tests/lib/librefuse/t_refuse_opt.c
cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/perfused/perfused.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/librefuse/Makefile
diff -u src/lib/librefuse/Makefile:1.11 src/lib/librefuse/Makefile:1.12
--- src/lib/librefuse/Makefile:1.11 Sun Nov 20 13:26:28 2016
+++ src/lib/librefuse/Makefile Sat Dec 4 06:42:39 2021
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.11 2016/11/20 13:26:28 pho Exp $
+# $NetBSD: Makefile,v 1.12 2021/12/04 06:42:39 pho Exp $
USE_FORT?= yes # data driven bugs?
@@ -11,7 +11,7 @@ FUSE_OPT_DEBUG_FLAGS= -g -DFUSE_OPT_DEBU
.endif
CFLAGS+= ${FUSE_OPT_DEBUG_FLAGS}
-CPPFLAGS+= -I${.CURDIR} -D_KERNTYPES
+CPPFLAGS+= -I${.CURDIR}
SRCS= refuse.c refuse_opt.c refuse_lowlevel.c
MAN= refuse.3
WARNS?= 5
Index: src/lib/librefuse/fuse.h
diff -u src/lib/librefuse/fuse.h:1.23 src/lib/librefuse/fuse.h:1.24
--- src/lib/librefuse/fuse.h:1.23 Wed Apr 10 21:38:02 2019
+++ src/lib/librefuse/fuse.h Sat Dec 4 06:42:39 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: fuse.h,v 1.23 2019/04/10 21:38:02 maya Exp $ */
+/* $NetBSD: fuse.h,v 1.24 2021/12/04 06:42:39 pho Exp $ */
/*
* Copyright � 2007 Alistair Crooks. All rights reserved.
@@ -28,19 +28,33 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef FUSE_H_
-#define FUSE_H_ 20070123
-
-/* set the default version to use for the fuse interface */
-/* this value determines the API to be used */
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
+#define FUSE_H_ 20211204
#include <sys/types.h>
#include <puffs.h>
#include <utime.h>
+/* The latest version of FUSE API currently provided by refuse. */
+#define FUSE_MAJOR_VERSION 2
+#define FUSE_MINOR_VERSION 6
+
+#define FUSE_MAKE_VERSION(maj, min) ((maj) * 10 + (min))
+#define FUSE_VERSION FUSE_MAKE_VERSION(FUSE_MAJOR_VERSION, FUSE_MINOR_VERSION)
+
+/* FUSE_USE_VERSION is expected to be defined by user code to
+ * determine the API to be used. Although defining this macro is
+ * mandatory in the original FUSE implementation, refuse hasn't
+ * required this so we only emit a warning if it's undefined. */
+#if defined(FUSE_USE_VERSION)
+# if FUSE_USE_VERSION > FUSE_VERSION
+# warning "The requested API version is higher than the latest one supported by refuse."
+# endif
+#else
+# warning "User code including <fuse.h> should define FUSE_USE_VERSION before including this header. Defaulting to the latest version."
+# define FUSE_USE_VERSION FUSE_VERSION
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -97,10 +111,6 @@ typedef struct puffs_fuse_dirh *fuse_dir
typedef int (*fuse_fill_dir_t)(void *, const char *, const struct stat *, off_t);
typedef int (*fuse_dirfil_t)(fuse_dirh_t, const char *, int, ino_t);
-#define FUSE_VERSION 26
-#define FUSE_MAJOR_VERSION 2
-#define FUSE_MINOR_VERSION 6
-
/*
* These operations shadow those in puffs_usermount, and are used
* as a table of callbacks to make when file system requests come
Index: src/lib/librefuse/refuse.c
diff -u src/lib/librefuse/refuse.c:1.102 src/lib/librefuse/refuse.c:1.103
--- src/lib/librefuse/refuse.c:1.102 Tue Nov 30 12:13:12 2021
+++ src/lib/librefuse/refuse.c Sat Dec 4 06:42:39 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: refuse.c,v 1.102 2021/11/30 12:13:12 pho Exp $ */
+/* $NetBSD: refuse.c,v 1.103 2021/12/04 06:42:39 pho Exp $ */
/*
* Copyright � 2007 Alistair Crooks. All rights reserved.
@@ -31,16 +31,20 @@
#include <sys/cdefs.h>
#if !defined(lint)
-__RCSID("$NetBSD: refuse.c,v 1.102 2021/11/30 12:13:12 pho Exp $");
+__RCSID("$NetBSD: refuse.c,v 1.103 2021/12/04 06:42:39 pho Exp $");
#endif /* !lint */
+/* We emit a compiler warning for anyone including <fuse.h> without
+ * defining FUSE_USE_VERSION. Define it here, or otherwise we'll be
+ * warned too. */
+#define FUSE_USE_VERSION FUSE_VERSION
+
#include <sys/types.h>
#include <assert.h>
#include <err.h>
#include <errno.h>
-#include <fuse.h>
-#include <fuse_lowlevel.h>
+#include <fuse_internal.h>
#include <fuse_opt.h>
#include <paths.h>
#include <stddef.h>
Index: src/lib/librefuse/refuse_lowlevel.c
diff -u src/lib/librefuse/refuse_lowlevel.c:1.1 src/lib/librefuse/refuse_lowlevel.c:1.2
--- src/lib/librefuse/refuse_lowlevel.c:1.1 Sun Nov 20 13:26:28 2016
+++ src/lib/librefuse/refuse_lowlevel.c Sat Dec 4 06:42:39 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: refuse_lowlevel.c,v 1.1 2016/11/20 13:26:28 pho Exp $ */
+/* $NetBSD: refuse_lowlevel.c,v 1.2 2021/12/04 06:42:39 pho Exp $ */
/*
* Copyright (c) 2016 The NetBSD Foundation, Inc.
@@ -31,10 +31,10 @@
#include <sys/cdefs.h>
#if !defined(lint)
-__RCSID("$NetBSD: refuse_lowlevel.c,v 1.1 2016/11/20 13:26:28 pho Exp $");
+__RCSID("$NetBSD: refuse_lowlevel.c,v 1.2 2021/12/04 06:42:39 pho Exp $");
#endif /* !lint */
-#include <fuse_lowlevel.h>
+#include <fuse_internal.h>
#include <fuse_opt.h>
#include <stddef.h>
#include <stdio.h>
Index: src/lib/librefuse/refuse_opt.c
diff -u src/lib/librefuse/refuse_opt.c:1.21 src/lib/librefuse/refuse_opt.c:1.22
--- src/lib/librefuse/refuse_opt.c:1.21 Wed Dec 1 14:17:50 2021
+++ src/lib/librefuse/refuse_opt.c Sat Dec 4 06:42:39 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: refuse_opt.c,v 1.21 2021/12/01 14:17:50 pho Exp $ */
+/* $NetBSD: refuse_opt.c,v 1.22 2021/12/04 06:42:39 pho Exp $ */
/*-
* Copyright (c) 2007 Juan Romero Pardines.
@@ -28,7 +28,7 @@
#include <sys/types.h>
#include <err.h>
-#include <fuse.h>
+#include <fuse_internal.h>
#include <fuse_opt.h>
#include <stdbool.h>
#include <stdio.h>
Index: src/sbin/mount_qemufwcfg/Makefile
diff -u src/sbin/mount_qemufwcfg/Makefile:1.4 src/sbin/mount_qemufwcfg/Makefile:1.5
--- src/sbin/mount_qemufwcfg/Makefile:1.4 Wed Oct 3 13:34:44 2018
+++ src/sbin/mount_qemufwcfg/Makefile Sat Dec 4 06:42:39 2021
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.4 2018/10/03 13:34:44 jmcneill Exp $
+# $NetBSD: Makefile,v 1.5 2021/12/04 06:42:39 pho Exp $
WARNS= 6
@@ -8,6 +8,4 @@ DPADD+= ${LIBREFUSE} ${LIBPUFFS} ${LIBUT
LDADD= -lrefuse -lpuffs -lutil
MAN= mount_qemufwcfg.8
-CPPFLAGS+= -D_KERNTYPES
-
.include <bsd.prog.mk>
Index: src/sbin/mount_qemufwcfg/fwcfg.c
diff -u src/sbin/mount_qemufwcfg/fwcfg.c:1.5 src/sbin/mount_qemufwcfg/fwcfg.c:1.6
--- src/sbin/mount_qemufwcfg/fwcfg.c:1.5 Thu Nov 30 15:42:18 2017
+++ src/sbin/mount_qemufwcfg/fwcfg.c Sat Dec 4 06:42:39 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: fwcfg.c,v 1.5 2017/11/30 15:42:18 wiz Exp $ */
+/* $NetBSD: fwcfg.c,v 1.6 2021/12/04 06:42:39 pho Exp $ */
/*-
* Copyright (c) 2017 Jared McNeill <[email protected]>
@@ -27,7 +27,9 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: fwcfg.c,v 1.5 2017/11/30 15:42:18 wiz Exp $");
+__RCSID("$NetBSD: fwcfg.c,v 1.6 2021/12/04 06:42:39 pho Exp $");
+
+#define FUSE_USE_VERSION FUSE_MAKE_VERSION(2, 6)
#include <sys/ioctl.h>
Index: src/tests/lib/librefuse/t_refuse_opt.c
diff -u src/tests/lib/librefuse/t_refuse_opt.c:1.8 src/tests/lib/librefuse/t_refuse_opt.c:1.9
--- src/tests/lib/librefuse/t_refuse_opt.c:1.8 Fri Jan 13 21:30:41 2017
+++ src/tests/lib/librefuse/t_refuse_opt.c Sat Dec 4 06:42:39 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: t_refuse_opt.c,v 1.8 2017/01/13 21:30:41 christos Exp $ */
+/* $NetBSD: t_refuse_opt.c,v 1.9 2021/12/04 06:42:39 pho Exp $ */
/*-
* Copyright (c) 2016 The NetBSD Foundation, Inc.
@@ -26,13 +26,13 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_refuse_opt.c,v 1.8 2017/01/13 21:30:41 christos Exp $");
+__RCSID("$NetBSD: t_refuse_opt.c,v 1.9 2021/12/04 06:42:39 pho Exp $");
-#define _KERNTYPES
#include <sys/types.h>
#include <atf-c.h>
+#define FUSE_USE_VERSION FUSE_MAKE_VERSION(2, 6)
#include <fuse.h>
#include "h_macros.h"
Index: src/usr.sbin/perfused/perfused.h
diff -u src/usr.sbin/perfused/perfused.h:1.10 src/usr.sbin/perfused/perfused.h:1.11
--- src/usr.sbin/perfused/perfused.h:1.10 Sat Feb 4 18:36:30 2012
+++ src/usr.sbin/perfused/perfused.h Sat Dec 4 06:42:39 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: perfused.h,v 1.10 2012/02/04 18:36:30 joerg Exp $ */
+/* $NetBSD: perfused.h,v 1.11 2021/12/04 06:42:39 pho Exp $ */
/*-
* Copyright (c) 2010 Emmanuel Dreyfus. All rights reserved.
@@ -30,7 +30,6 @@
#include <puffs.h>
#include "../../lib/libperfuse/perfuse_if.h"
-#include "fuse.h"
#define PERFUSE_MSG_T struct puffs_framebuf
Added files:
Index: src/lib/librefuse/fuse_internal.h
diff -u /dev/null src/lib/librefuse/fuse_internal.h:1.1
--- /dev/null Sat Dec 4 06:42:39 2021
+++ src/lib/librefuse/fuse_internal.h Sat Dec 4 06:42:39 2021
@@ -0,0 +1,42 @@
+/* $NetBSD: fuse_internal.h,v 1.1 2021/12/04 06:42:39 pho Exp $ */
+
+/*
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
+ */
+#if !defined(FUSE_INTERNAL_H)
+#define FUSE_INTERNAL_H
+
+/* We emit a compiler warning for anyone including <fuse.h> without
+ * defining FUSE_USE_VERSION. Define it here, or otherwise we'll be
+ * warned too. */
+#define FUSE_USE_VERSION FUSE_VERSION
+
+#include <fuse.h>
+#include <fuse_lowlevel.h>
+
+#endif