svn commit: r247662 - head/sys/geom/label

Attilio Rao attilio at FreeBSD.org
Sat Mar 2 18:24:00 UTC 2013


Author: attilio
Date: Sat Mar  2 18:23:59 2013
New Revision: 247662
URL: http://svnweb.freebsd.org/changeset/base/247662

Log:
  Remove ntfs headers dependency for g_label_ntfs.c by redefining the
  used structs and values.
  
  This patch is not targeted for MFC.

Modified:
  head/sys/geom/label/g_label_ntfs.c

Modified: head/sys/geom/label/g_label_ntfs.c
==============================================================================
--- head/sys/geom/label/g_label_ntfs.c	Sat Mar  2 18:18:30 2013	(r247661)
+++ head/sys/geom/label/g_label_ntfs.c	Sat Mar  2 18:23:59 2013	(r247662)
@@ -32,21 +32,72 @@ __FBSDID("$FreeBSD$");
 #include <sys/kernel.h>
 #include <sys/malloc.h>
 
-#include <fs/ntfs/ntfs.h>
-
 #include <geom/geom.h>
 #include <geom/label/g_label.h>
 
+#define	NTFS_A_VOLUMENAME	0x60
+#define	NTFS_FILEMAGIC		((uint32_t)(0x454C4946))
+#define	NTFS_VOLUMEINO		3
+
 #define G_LABEL_NTFS_DIR	"ntfs"
 
+struct ntfs_attr {
+	uint32_t	a_type;
+	uint32_t	reclen;
+	uint8_t		a_flag;
+	uint8_t		a_namelen;
+	uint8_t		a_nameoff;
+	uint8_t		reserved1;
+	uint8_t		a_compression;
+	uint8_t		reserved2;
+	uint16_t	a_index;
+	uint16_t	a_datalen;
+	uint16_t	reserved3;
+	uint16_t	a_dataoff;
+	uint16_t	a_indexed;
+};
+
+struct ntfs_filerec {
+	uint32_t	fr_hdrmagic;
+	uint16_t	fr_hdrfoff;
+	uint16_t	fr_hdrfnum;
+	uint8_t		reserved[8];
+	uint16_t	fr_seqnum;
+	uint16_t	fr_nlink;
+	uint16_t	fr_attroff;
+	uint16_t	fr_flags;
+	uint32_t	fr_size;
+	uint32_t	fr_allocated;
+	uint64_t	fr_mainrec;
+	uint16_t	fr_attrnum;
+};
+
+struct ntfs_bootfile {
+	uint8_t		reserved1[3];
+	uint8_t		bf_sysid[8];
+	uint16_t	bf_bps;
+	uint8_t		bf_spc;
+	uint8_t		reserved2[7];
+	uint8_t		bf_media;
+	uint8_t		reserved3[2];
+	uint16_t	bf_spt;
+	uint16_t	bf_heads;
+	uint8_t		reserver4[12];
+	uint64_t	bf_spv;
+	uint64_t	bf_mftcn;
+	uint64_t	bf_mftmirrcn;
+	uint8_t		bf_mftrecsz;
+	uint32_t	bf_ibsz;
+	uint32_t	bf_volsn;
+};
 
 static void
 g_label_ntfs_taste(struct g_consumer *cp, char *label, size_t size)
 {
 	struct g_provider *pp;
-	struct bootfile *bf;
-	struct filerec *fr;
-	struct attr *atr;
+	struct ntfs_bootfile *bf;
+	struct ntfs_filerec *fr;
+	struct ntfs_attr *atr;
 	off_t voloff;
 	char *filerecp, *ap;
 	char mftrecsz, vnchar;
@@ -58,7 +109,7 @@ g_label_ntfs_taste(struct g_consumer *cp
 	pp = cp->provider;
 	filerecp = NULL;
 
-	bf = (struct bootfile *)g_read_data(cp, 0, pp->sectorsize, NULL);
+	bf = (struct ntfs_bootfile *)g_read_data(cp, 0, pp->sectorsize, NULL);
 	if (bf == NULL || strncmp(bf->bf_sysid, "NTFS    ", 8) != 0)
 		goto done;
 
@@ -75,16 +126,16 @@ g_label_ntfs_taste(struct g_consumer *cp
 	filerecp = g_read_data(cp, voloff, recsize, NULL);
 	if (filerecp == NULL)
 		goto done;
-	fr = (struct filerec *)filerecp;
+	fr = (struct ntfs_filerec *)filerecp;
 
-	if (fr->fr_fixup.fh_magic != NTFS_FILEMAGIC)
+	if (fr->fr_hdrmagic != NTFS_FILEMAGIC)
 		goto done;
 
 	for (ap = filerecp + fr->fr_attroff;
-	    atr = (struct attr *)ap, atr->a_hdr.a_type != -1;
-	    ap += atr->a_hdr.reclen) {
-		if (atr->a_hdr.a_type == NTFS_A_VOLUMENAME) {
-			if(atr->a_r.a_datalen >= size *2){
+	    atr = (struct ntfs_attr *)ap, atr->a_type != -1;
+	    ap += atr->reclen) {
+		if (atr->a_type == NTFS_A_VOLUMENAME) {
+			if(atr->a_datalen >= size *2){
 				label[0] = 0;
 				goto done;
 			}
@@ -92,8 +143,8 @@ g_label_ntfs_taste(struct g_consumer *cp
 			 *UNICODE to ASCII.
 			 * Should we need to use iconv(9)?
 			 */
-			for (j = 0; j < atr->a_r.a_datalen; j++) {
-				vnchar = *(ap + atr->a_r.a_dataoff + j);
+			for (j = 0; j < atr->a_datalen; j++) {
+				vnchar = *(ap + atr->a_dataoff + j);
 				if (j & 1) {
 					if (vnchar) {
 						label[0] = 0;


More information about the svn-src-all mailing list