mirror of
https://github.com/Stichting-MINIX-Research-Foundation/pkgsrc-ng.git
synced 2025-08-08 04:07:25 -04:00
180 lines
4.5 KiB
Plaintext
180 lines
4.5 KiB
Plaintext
$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;
|
|
+}
|