Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 May 2025 16:58:36 GMT
From:      Jessica Clarke <jrtc27@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 52c8e24cc03b - main - cross-build: Provide real fflagstostr/strtofflags on Linux
Message-ID:  <202505061658.546GwawW051729@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by jrtc27:

URL: https://cgit.FreeBSD.org/src/commit/?id=52c8e24cc03b6a109f678a3a72ef5c88cb45cc07

commit 52c8e24cc03b6a109f678a3a72ef5c88cb45cc07
Author:     Jessica Clarke <jrtc27@FreeBSD.org>
AuthorDate: 2025-05-06 16:58:10 +0000
Commit:     Jessica Clarke <jrtc27@FreeBSD.org>
CommitDate: 2025-05-06 16:58:10 +0000

    cross-build: Provide real fflagstostr/strtofflags on Linux
    
    These are used by mtree and makefs, so in order to be able to set schg
    on /var/empty in METALOG and set schg on various files and directories
    in the resulting disk images we need to have a real implementation
    rather than always giving no flags.
    
    Ideally mtree wouldn't rely on round-tripping the textual flags field
    via the "native" flags encoding using these functions, and ideally
    makefs wouldn't rely on the "native" flags encoding matching FreeBSD's,
    but in practice macOS's schg is the same and we can pretend Linux has
    the same.
    
    This fixes Linux-produced disk images lacking schg on any files or
    directories, and Linux-produced distribution tarballs lacking schg on
    /var/empty (note though that they do set schg on files, as install
    already preserves file flags on Linux).
    
    Reviewed by:    emaste, markj
    Differential Revision:  https://reviews.freebsd.org/D50080
---
 tools/build/Makefile                             |  7 ++-
 tools/build/cross-build/fflags.c                 | 62 ------------------------
 tools/build/cross-build/include/linux/sys/stat.h | 20 ++++++++
 3 files changed, 25 insertions(+), 64 deletions(-)

diff --git a/tools/build/Makefile b/tools/build/Makefile
index f4bb383693a8..a9f4a84e6f7c 100644
--- a/tools/build/Makefile
+++ b/tools/build/Makefile
@@ -212,8 +212,11 @@ CFLAGS.closefrom.c+=	-DSTDC_HEADERS -DHAVE_SYS_DIR_H -DHAVE_DIRENT_H \
 	-DHAVE_DIRFD -DHAVE_SYSCONF
 # Provide getprogname/setprograme
 SRCS+=	progname.c
-# Stub implementations of fflagstostr/strtofflags
-SRCS+=	fflags.c
+# Provide fflagstostr/strtofflags for mtree and makefs
+# On macOS we use the host's so conflate host and target flags, which ideally
+# we'd avoid, but in practice these align for many flags, including
+# SF_IMMUTABLE, the only flag we currently set during install.
+SRCS+=	strtofflags.c
 
 # macOS has a standalone cross-build implementation, but Linux can use the same
 # ELF one as FreeBSD
diff --git a/tools/build/cross-build/fflags.c b/tools/build/cross-build/fflags.c
deleted file mode 100644
index f1d23c3637b6..000000000000
--- a/tools/build/cross-build/fflags.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright 2018-2020 Alex Richardson <arichardson@FreeBSD.org>
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory (Department of Computer Science and
- * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
- * DARPA SSITH research programme.
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
- * ("CTSRD"), as part of the DARPA CRASH research programme.
- *
- * This work was supported by Innovate UK project 105694, "Digital Security by
- * Design (DSbD) Technology Platform Prototype".
- *
- * 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 <string.h>
-#include <unistd.h>
-
-char *
-fflagstostr(u_long flags __unused)
-{
-	return strdup("");
-}
-
-int
-strtofflags(char **stringp __unused, u_long *setp, u_long *clrp)
-{
-	/* On linux just ignore the file flags for now */
-	/*
-	 * XXX: this will prevent makefs from setting noschg on libc, etc.
-	 * so we should really find a way to support flags in disk images.
-	 */
-	if (setp)
-		*setp = 0;
-	if (clrp)
-		*clrp = 0;
-	return (0); /* success */
-}
diff --git a/tools/build/cross-build/include/linux/sys/stat.h b/tools/build/cross-build/include/linux/sys/stat.h
index 5937920ce461..1a69e127c2e1 100644
--- a/tools/build/cross-build/include/linux/sys/stat.h
+++ b/tools/build/cross-build/include/linux/sys/stat.h
@@ -66,5 +66,25 @@
 #define ALLPERMS (S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO)
 #endif
 
+#define	UF_SETTABLE	0x0000ffff
+#define	UF_NODUMP	0x00000001
+#define	UF_IMMUTABLE	0x00000002
+#define	UF_APPEND	0x00000004
+#define	UF_OPAQUE	0x00000008
+#define	UF_NOUNLINK	0x00000010
+#define	UF_SYSTEM	0x00000080
+#define	UF_SPARSE	0x00000100
+#define	UF_OFFLINE	0x00000200
+#define	UF_REPARSE	0x00000400
+#define	UF_ARCHIVE	0x00000800
+#define	UF_READONLY	0x00001000
+#define	UF_HIDDEN	0x00008000
+#define	SF_SETTABLE	0xffff0000
+#define	SF_ARCHIVED	0x00010000
+#define	SF_IMMUTABLE	0x00020000
+#define	SF_APPEND	0x00040000
+#define	SF_NOUNLINK	0x00100000
+#define	SF_SNAPSHOT	0x00200000
+
 /* This include is needed for OpenZFS bootstrap */
 #include <sys/mount.h>



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