]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
add in fstyp checker as a non-default make target.
authorNathan Scott <nathans@sgi.com>
Thu, 19 Apr 2001 04:57:33 +0000 (04:57 +0000)
committerNathan Scott <nathans@sgi.com>
Thu, 19 Apr 2001 04:57:33 +0000 (04:57 +0000)
mkfs/Makefile
mkfs/fstyp.c [new file with mode: 0644]

index 97b10260397888c06b0291ecd65f02cac9bbfd40..690a1be61d21d091db48a000724826fb2be33289 100644 (file)
@@ -35,6 +35,7 @@ include $(TOPDIR)/include/builddefs
 
 CMDTARGET = mkfs.xfs
 MAXTRRES = maxtrres
+FSTYP = fstyp
 
 CFILES = xfs_mkfs.c mountinfo.c proto.c
 HFILES = xfs_mkfs.h mountinfo.h proto.h volume.h
@@ -43,8 +44,8 @@ LLDLIBS = $(LIBXFS) $(LIBUUID) $(LIBLVM)
 LLDFLAGS = -L$(TOPDIR)/libxfs
 
 MAXTRLIBS = $(LIBXFS) $(LIBUUID)
-LSRCFILES = $(MAXTRRES).c
-LDIRT = $(MAXTRRES) $(MAXTRRES).h
+LSRCFILES = $(MAXTRRES).c $(FSTYP).c
+LDIRT = $(MAXTRRES) $(MAXTRRES).h $(FSTYP)
 
 default: $(MAXTRRES).h $(CMDTARGET)
 
@@ -57,6 +58,9 @@ $(MAXTRRES).h: $(MAXTRRES)
        LD_LIBRARY_PATH=../libxfs; export LD_LIBRARY_PATH; \
        ./$(MAXTRRES) > $@ || ( rm -f $@ && exit 1 )
 
+$(FSTYP): $(CMDTARGET)
+       $(CCF) $@.c -o $@ $(LDFLAGS) mountinfo.o
+
 install: default
        $(INSTALL) -m 755 -d $(PKG_SBIN_DIR)
        $(INSTALL) -m 755 $(CMDTARGET) $(PKG_SBIN_DIR)
diff --git a/mkfs/fstyp.c b/mkfs/fstyp.c
new file mode 100644 (file)
index 0000000..5fa010b
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2000 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 <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "mountinfo.h"
+
+/*
+ * fstyp allows the user to determine the filesystem identifier of
+ * mounted or unmounted filesystems using heuristics.
+ * 
+ * The filesystem type is required by mount(2) and sometimes by mount(8)
+ * to mount filesystems of different types.  fstyp uses exactly the same
+ * heuristics that mount does to determine whether the supplied device
+ * special file is of a known filesystem type.  If it is, fstyp prints
+ * on standard output the usual filesystem identifier for that type and
+ * exits with a zero return code.  If no filesystem is identified, fstyp
+ * prints "Unknown" to indicate failure and exits with a non-zero status.
+ *
+ * WARNING: The use of heuristics implies that the result of fstyp is not
+ * guaranteed to be accurate.
+ */
+
+int
+main(int argc, char *argv[])
+{
+       char    *type;
+
+       if (argc != 2) {
+               fprintf(stderr, "Usage: %s <device>\n", basename(argv[0]));
+               exit(1);
+       }
+
+       if (access(argv[1], R_OK) < 0) {
+               perror(argv[1]);
+               exit(1);
+       }
+
+       if ((type = mnt_known_fs_type(argv[1])) == NULL) {
+               printf("Unknown\n");
+               exit(1);
+       }
+       printf("%s\n", type);
+       exit(0);
+}