pkgsrc/sysutils/xfsprogs/patches/patch-ae
agc 8dc522478c Initial import of xfsprogs-2.7.3 into the Packages Collection.
XFS combines advanced journaling technology with full 64-bit
	addressing and scalable structures and algorithms.

	+ Journaled 64-bit filesystem with guaranteed filesystem consistency.

	+ XFS supports filesystem growth for mounted volumes, allows
	filesystem "freeze" and "thaw" operations to support volume level
	snapshots, and provides an online file defragmentation utility.

	+ XFS supports user and group quotas.  XFS considers quota information
	as filesystem metadata and uses journaling to avoid the need for
	lengthy quota consistency checks after a crash.

	+ For Linux 2.6 and beyond, when using 64 bit addressing in the block
	devices layer (CONFIG_LBD) and a 64 bit platform, filesystem size
	limit increases to 9 million terabytes (or the device limits).  For
	these later kernels on 32 bit platforms, 16TB is the current limit
	even with 64 bit addressing enabled in the block layer.

	This package contains filesystem manipulation and support programs.

Very loosely based on the FreeBSD port (I took the MASTER_SITES from there).
2005-12-30 23:03:05 +00:00

179 lines
4.5 KiB
Text

$NetBSD: patch-ae,v 1.1.1.1 2005/12/30 23:03:06 agc Exp $
--- /dev/null 2005-12-29 14:18:54.000000000 +0000
+++ libxfs/netbsd.c 2005-12-29 14:22:31.000000000 +0000
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2003 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Further, this software is distributed without any warranty that it is
+ * free of the rightful claim of any third person regarding infringement
+ * or the like. Any license provided herein, whether implied or
+ * otherwise, applies only to this software file. Patent licenses, if
+ * any, provided herein do not apply to combinations of this program with
+ * other software, or any other product whatsoever.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston MA 02111-1307, USA.
+ *
+ * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+ * Mountain View, CA 94043, or:
+ *
+ * http://www.sgi.com
+ *
+ * For further information regarding this notice, see:
+ *
+ * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+ */
+
+#include <xfs/libxfs.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/disk.h>
+#include <sys/mount.h>
+#include <sys/ioctl.h>
+
+extern char *progname;
+
+int
+platform_check_ismounted(char *name, char *block, struct stat64 *s, int verbose)
+{
+ struct stat st;
+ int cnt, i;
+#if (defined(__NetBSD__) && (__NetBSD_Version__ >= 299000900))
+ struct statvfs *fsinfo;
+#else
+ struct statfs *fsinfo;
+#endif
+
+ if (!s) {
+ if (stat(block, &st) < 0)
+ return 0;
+ s = &st;
+ }
+
+ /* Remember, FreeBSD can now mount char devices! -- adrian */
+ if (((st.st_mode & S_IFMT) != S_IFBLK) &&
+ ((st.st_mode & S_IFMT) != S_IFCHR))
+ return 0;
+
+ if ((cnt = getmntinfo(&fsinfo, MNT_NOWAIT)) == 0) {
+ fprintf(stderr,
+ _("%s: %s possibly contains a mounted filesystem\n"),
+ progname, name);
+ return 1;
+ }
+
+ for (i = 0; i < cnt; i++) {
+ if (strcmp (name, fsinfo[i].f_mntfromname) != 0)
+ continue;
+
+ if (verbose)
+ fprintf(stderr,
+ _("%s: %s contains a mounted filesystem\n"),
+ progname, name);
+ break;
+ }
+
+ return (i < cnt);
+}
+
+int
+platform_check_iswritable(char *name, char *block, struct stat64 *s, int fatal)
+{
+ int cnt, i;
+#if (defined(__NetBSD__) && (__NetBSD_Version__ >= 299000900))
+ struct statvfs *fsinfo;
+#else
+ struct statfs *fsinfo;
+#endif
+
+ if ((cnt = getmntinfo(&fsinfo, MNT_NOWAIT)) == 0) {
+ fprintf(stderr, _("%s: %s contains a possibly writable, "
+ "mounted filesystem\n"), progname, name);
+ return fatal;
+ }
+
+ for (i = 0; i < cnt; i++) {
+ if (strcmp (name, fsinfo[i].f_mntfromname) != 0)
+ continue;
+
+ if (fsinfo[i].f_flag &= MNT_RDONLY)
+ break;
+ }
+
+ if (i == cnt) {
+ fprintf(stderr, _("%s: %s contains a mounted and writable "
+ "filesystem\n"), progname, name);
+ return fatal;
+ }
+ return 0;
+}
+
+void
+platform_set_blocksize(int fd, char *path, int blocksize)
+{
+ return;
+}
+
+void
+platform_flush_device(int fd, dev_t device)
+{
+ return;
+}
+
+void
+platform_findsizes(char *path, int fd, long long *sz, int *bsz)
+{
+ struct stat st;
+ __int64_t size;
+ u_int ssize;
+
+ if (fstat(fd, &st) < 0) {
+ fprintf(stderr, _("%s: "
+ "cannot stat the device file \"%s\": %s\n"),
+ progname, path, strerror(errno));
+ exit(1);
+ }
+
+ if ((st.st_mode & S_IFMT) == S_IFREG) {
+ *sz = (long long)(st.st_size >> 9);
+ *bsz = 512;
+ return;
+ }
+
+ if ((st.st_mode & S_IFMT) != S_IFCHR) {
+ fprintf(stderr, _("%s: "
+ "Not a device or file: \"%s\"n"),
+ progname, path);
+ exit(1);
+ }
+
+ if ((size = st.st_size) == 0) {
+ fprintf(stderr, _("%s: "
+ "zero size: \"%s\"n"),
+ progname, path);
+ exit(1);
+ }
+
+ if ((ssize = st.st_blksize) == 0) {
+ fprintf(stderr, _("%s: "
+ "zero block size \"%s\": %s\n"),
+ progname, path, strerror(errno));
+ exit(1);
+ }
+
+ *sz = (long long) (size / ssize);
+ *bsz = (int)ssize;
+}