summaryrefslogtreecommitdiff
path: root/rc
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-04-21 10:40:03 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-04-21 10:40:03 +0000
commit19a82a265411a5f5e9eae9d315279befd001a47d (patch)
tree52f49d72e4707264db3319ceb492bf701e7865a0 /rc
parenta7db29c663f797e2b5e417909f81e6df78dc992c (diff)
add fstype command to detect 9660, kfs and cwfs filesystems
Diffstat (limited to 'rc')
-rwxr-xr-xrc/bin/fstype57
1 files changed, 57 insertions, 0 deletions
diff --git a/rc/bin/fstype b/rc/bin/fstype
new file mode 100755
index 000000000..c2fd65d9c
--- /dev/null
+++ b/rc/bin/fstype
@@ -0,0 +1,57 @@
+#!/bin/rc
+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
+}
+dd -if $1 -count 1 >[2]/dev/null | \
+awk '
+/^kfs/{fs["kfs"]++}
+/^(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
+}
+'