~pixelherodev/ANTS

ref: 5eae0c58b5108f9129cb85ed96e84cdc057da511 ANTS/rc/bin/fstype -rwxr-xr-x 1.7 KiB
5eae0c58Noam Preil fstype: detect fossils 1 year, 1 month ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/rc
rfork e
m=`{dd -if $1 -bs 2048 -skip 16 >[2]/dev/null | xd -c | sed 1q | \
	sed 's/.........(....................).*/\1/; s/ //g'}
if(~ $"m 01CD00101){
	echo 9660
	exit
}
m=`{dd -bs 1024 -count 1 -if $1 -iseek 127 >[2]/dev/null}
if(~ $"m fossil*){
	echo fossil
	exit
}
dd -if $1 -count 1 >/env/block >[2]/dev/null
fn fat {
	m=`{dd -if /env/block -bs 1 -count 3 -skip $1 >[2]/dev/null}
	~ $"m FAT
}
if(fat 54 || fat 82){
	echo dos
	exit
}
m=`{dd -if /env/block -bs 4 -count 1 >[2]/dev/null | xd | sed 's,0000000  ,,;q'}
if(~ $"m 529ab12b){
	echo paqfs
	exit
}
if(~ $"m 011ce50d){
	echo hjfs
	exit
}
m=`{dd -if /env/block -bs 16 -count 1 -skip 16 >[2]/dev/null}
if(~ $"m 'kfs wren device'){
	echo kfs
	exit
}
</env/block awk '
/^(blocksize|daddrbits|daddrbits|indirblks|dirblks|namelen)/{p[$1]=$2}
END{
	ca["fs", "blocksize"] = 4*1024
	ca["fs", "namelen"] = 28
	ca["fs", "dirblks"] = 6
	ca["fs", "indirblks"] = 2
	ca["fs", "daddrbits"] = 32

	ca["fs64", "blocksize"] = 8*1024
	ca["fs64", "namelen"] = 56
	ca["fs64", "dirblks"] = 6
	ca["fs64", "indirblks"] = 4
	ca["fs64", "daddrbits"] = 64

	ca["cwfs", "blocksize"] = 16*1024
	ca["cwfs", "namelen"] = 28
	ca["cwfs", "dirblks"] = 6
	ca["cwfs", "indirblks"] = 2
	ca["cwfs", "daddrbits"] = 32

	ca["cwfs64", "blocksize"] = 16*1024
	ca["cwfs64", "namelen"] = 56
	ca["cwfs64", "dirblks"] = 6
	ca["cwfs64", "indirblks"] = 4
	ca["cwfs64", "daddrbits"] = 64

	ca["cwfs64x", "blocksize"] = 16*1024
	ca["cwfs64x", "namelen"] = 144
	ca["cwfs64x", "dirblks"] = 6
	ca["cwfs64x", "indirblks"] = 4
	ca["cwfs64x", "daddrbits"] = 64

	for(e in ca){
		split(e, k, SUBSEP)
		if(ca[k[1],k[2]] == p[k[2]])
			fs[k[1]]++
	}
	for(i in fs)
		if(fs[i] > fs[j])
			j=i
	if(fs[j]){
		print j
		exit
	}
	exit 1
}
'