0000: 23 21 20 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 #! /usr/bin/env
0010: 74 63 6c 73 68 0a 0a 73 65 74 20 6f 62 73 66 75 tclsh..set obsfu
0020: 63 61 74 65 20 30 0a 69 66 20 7b 5b 6c 69 6e 64 cate 0.if {[lind
0030: 65 78 20 24 61 72 67 76 20 65 6e 64 5d 20 3d 3d ex $argv end] ==
0040: 20 22 2d 2d 6f 62 73 66 75 63 61 74 65 22 7d 20 "--obsfucate"}
0050: 7b 0a 09 73 65 74 20 6f 62 73 66 75 63 61 74 65 {..set obsfucate
0060: 20 31 0a 0a 09 73 65 74 20 61 72 67 76 20 5b 6c 1...set argv [l
0070: 72 61 6e 67 65 20 24 61 72 67 76 20 30 20 65 6e range $argv 0 en
0080: 64 2d 31 5d 0a 7d 0a 0a 69 66 20 7b 5b 6c 6c 65 d-1].}..if {[lle
0090: 6e 67 74 68 20 24 61 72 67 76 5d 20 21 3d 20 32 ngth $argv] != 2
00a0: 7d 20 7b 0a 09 70 75 74 73 20 73 74 64 65 72 72 } {..puts stderr
00b0: 20 22 55 73 61 67 65 3a 20 64 69 72 32 63 2e 74 "Usage: dir2c.t
00c0: 63 6c 20 3c 68 61 73 68 6b 65 79 3e 20 3c 73 74 cl <hashkey> <st
00d0: 61 72 74 64 69 72 3e 20 5c 5b 2d 2d 6f 62 73 66 artdir> \[--obsf
00e0: 75 63 61 74 65 5c 5d 22 0a 0a 09 65 78 69 74 20 ucate\]"...exit
00f0: 31 0a 7d 0a 0a 73 65 74 20 68 61 73 68 6b 65 79 1.}..set hashkey
0100: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 30 [lindex $argv 0
0110: 5d 0a 73 65 74 20 73 74 61 72 74 64 69 72 20 5b ].set startdir [
0120: 6c 69 6e 64 65 78 20 24 61 72 67 76 20 31 5d 0a lindex $argv 1].
0130: 0a 70 72 6f 63 20 73 68 6f 72 74 65 6e 5f 66 69 .proc shorten_fi
0140: 6c 65 20 7b 64 69 72 20 66 69 6c 65 7d 20 7b 0a le {dir file} {.
0150: 09 73 65 74 20 64 69 72 4e 61 6d 65 4c 65 6e 20 .set dirNameLen
0160: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length $
0170: 64 69 72 5d 0a 0a 09 69 66 20 7b 5b 73 74 72 69 dir]...if {[stri
0180: 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 20 30 ng range $file 0
0190: 20 5b 65 78 70 72 20 7b 24 64 69 72 4e 61 6d 65 [expr {$dirName
01a0: 4c 65 6e 20 2d 20 31 7d 5d 5d 20 3d 3d 20 24 64 Len - 1}]] == $d
01b0: 69 72 7d 20 7b 0a 09 09 73 65 74 20 66 69 6c 65 ir} {...set file
01c0: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 [string range $
01d0: 66 69 6c 65 20 24 64 69 72 4e 61 6d 65 4c 65 6e file $dirNameLen
01e0: 20 65 6e 64 5d 0a 09 7d 0a 0a 09 69 66 20 7b 5b end]..}...if {[
01f0: 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 66 69 string index $fi
0200: 6c 65 20 30 5d 20 3d 3d 20 22 2f 22 7d 20 7b 0a le 0] == "/"} {.
0210: 09 09 73 65 74 20 66 69 6c 65 20 5b 73 74 72 69 ..set file [stri
0220: 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 20 31 ng range $file 1
0230: 20 65 6e 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e end]..}..return
0240: 20 24 66 69 6c 65 0a 7d 0a 0a 70 72 6f 63 20 72 $file.}..proc r
0250: 65 63 75 72 73 69 76 65 5f 67 6c 6f 62 20 7b 64 ecursive_glob {d
0260: 69 72 7d 20 7b 0a 09 73 65 74 20 63 68 69 6c 64 ir} {..set child
0270: 72 65 6e 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d ren [glob -nocom
0280: 70 6c 61 69 6e 20 2d 64 69 72 65 63 74 6f 72 79 plain -directory
0290: 20 24 64 69 72 20 2a 5d 0a 0a 09 73 65 74 20 72 $dir *]...set r
02a0: 65 74 20 5b 6c 69 73 74 20 24 64 69 72 5d 0a 09 et [list $dir]..
02b0: 66 6f 72 65 61 63 68 20 63 68 69 6c 64 20 24 63 foreach child $c
02c0: 68 69 6c 64 72 65 6e 20 7b 0a 09 09 75 6e 73 65 hildren {...unse
02d0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 68 t -nocomplain ch
02e0: 69 6c 64 69 6e 66 6f 0a 09 09 63 61 74 63 68 20 ildinfo...catch
02f0: 7b 0a 09 09 09 66 69 6c 65 20 73 74 61 74 20 24 {....file stat $
0300: 63 68 69 6c 64 20 63 68 69 6c 64 69 6e 66 6f 0a child childinfo.
0310: 09 09 7d 0a 0a 09 09 69 66 20 7b 21 5b 69 6e 66 ..}....if {![inf
0320: 6f 20 65 78 69 73 74 73 20 63 68 69 6c 64 69 6e o exists childin
0330: 66 6f 28 74 79 70 65 29 5d 7d 20 7b 0a 09 09 09 fo(type)]} {....
0340: 63 6f 6e 74 69 6e 75 65 0a 09 09 7d 0a 0a 09 09 continue...}....
0350: 69 66 20 7b 24 63 68 69 6c 64 69 6e 66 6f 28 74 if {$childinfo(t
0360: 79 70 65 29 20 3d 3d 20 22 64 69 72 65 63 74 6f ype) == "directo
0370: 72 79 22 7d 20 7b 0a 09 09 09 66 6f 72 65 61 63 ry"} {....foreac
0380: 68 20 61 64 64 20 5b 72 65 63 75 72 73 69 76 65 h add [recursive
0390: 5f 67 6c 6f 62 20 24 63 68 69 6c 64 5d 20 7b 0a _glob $child] {.
03a0: 09 09 09 09 6c 61 70 70 65 6e 64 20 72 65 74 20 ....lappend ret
03b0: 24 61 64 64 0a 09 09 09 7d 0a 0a 09 09 09 63 6f $add....}.....co
03c0: 6e 74 69 6e 75 65 0a 09 09 7d 0a 0a 09 09 69 66 ntinue...}....if
03d0: 20 7b 24 63 68 69 6c 64 69 6e 66 6f 28 74 79 70 {$childinfo(typ
03e0: 65 29 20 21 3d 20 22 66 69 6c 65 22 7d 20 7b 0a e) != "file"} {.
03f0: 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09 09 7d 0a ...continue...}.
0400: 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 74 20 24 ...lappend ret $
0410: 63 68 69 6c 64 0a 09 7d 0a 0a 09 72 65 74 75 72 child..}...retur
0420: 6e 20 24 72 65 74 0a 7d 0a 0a 23 20 43 6f 6e 76 n $ret.}..# Conv
0430: 65 72 74 20 61 20 73 74 72 69 6e 67 20 69 6e 74 ert a string int
0440: 6f 20 61 20 43 2d 73 74 79 6c 65 20 62 69 6e 61 o a C-style bina
0450: 72 79 20 73 74 72 69 6e 67 0a 23 23 20 58 58 58 ry string.## XXX
0460: 3a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 : This function
0470: 6e 65 65 64 73 20 74 6f 20 62 65 20 6f 70 74 69 needs to be opti
0480: 6d 69 7a 65 64 0a 70 72 6f 63 20 73 74 72 69 6e mized.proc strin
0490: 67 69 66 79 20 7b 64 61 74 61 7d 20 7b 0a 09 73 gify {data} {..s
04a0: 65 74 20 72 65 74 20 22 5c 22 22 0a 09 66 6f 72 et ret "\""..for
04b0: 20 7b 73 65 74 20 69 64 78 20 30 7d 20 7b 24 69 {set idx 0} {$i
04c0: 64 78 20 3c 20 5b 73 74 72 69 6e 67 20 6c 65 6e dx < [string len
04d0: 67 74 68 20 24 64 61 74 61 5d 7d 20 7b 69 6e 63 gth $data]} {inc
04e0: 72 20 69 64 78 7d 20 7b 0a 09 09 62 69 6e 61 72 r idx} {...binar
04f0: 79 20 73 63 61 6e 20 5b 73 74 72 69 6e 67 20 69 y scan [string i
0500: 6e 64 65 78 20 24 64 61 74 61 20 24 69 64 78 5d ndex $data $idx]
0510: 20 48 2a 20 63 68 61 72 0a 0a 09 09 61 70 70 65 H* char....appe
0520: 6e 64 20 72 65 74 20 22 5c 5c 78 24 7b 63 68 61 nd ret "\\x${cha
0530: 72 7d 22 0a 0a 09 09 69 66 20 7b 28 24 69 64 78 r}"....if {($idx
0540: 20 25 20 32 30 29 20 3d 3d 20 30 20 26 26 20 24 % 20) == 0 && $
0550: 69 64 78 20 21 3d 20 30 7d 20 7b 0a 09 09 09 61 idx != 0} {....a
0560: 70 70 65 6e 64 20 72 65 74 20 22 5c 22 5c 6e 5c ppend ret "\"\n\
0570: 22 22 0a 09 09 7d 0a 09 7d 0a 0a 09 73 65 74 20 ""...}..}...set
0580: 72 65 74 20 5b 73 74 72 69 6e 67 20 74 72 69 6d ret [string trim
0590: 20 24 72 65 74 20 22 5c 6e 5c 22 22 5d 0a 0a 09 $ret "\n\""]...
05a0: 73 65 74 20 72 65 74 20 22 5c 22 24 72 65 74 5c set ret "\"$ret\
05b0: 22 22 0a 0a 09 72 65 74 75 72 6e 20 24 72 65 74 ""...return $ret
05c0: 0a 7d 0a 0a 23 20 45 6e 63 72 79 70 74 20 74 68 .}..# Encrypt th
05d0: 65 20 64 61 74 61 0a 70 72 6f 63 20 72 61 6e 64 e data.proc rand
05e0: 6f 6d 5f 62 79 74 65 20 7b 7d 20 7b 0a 09 73 65 om_byte {} {..se
05f0: 74 20 76 61 6c 75 65 20 5b 65 78 70 72 20 7b 69 t value [expr {i
0600: 6e 74 28 32 35 36 20 2a 20 72 61 6e 64 28 29 29 nt(256 * rand())
0610: 7d 5d 0a 0a 09 72 65 74 75 72 6e 20 24 76 61 6c }]...return $val
0620: 75 65 0a 7d 0a 0a 70 72 6f 63 20 65 6e 63 72 79 ue.}..proc encry
0630: 70 74 5f 6b 65 79 5f 67 65 6e 65 72 61 74 65 20 pt_key_generate
0640: 7b 6d 65 74 68 6f 64 7d 20 7b 0a 09 73 77 69 74 {method} {..swit
0650: 63 68 20 2d 2d 20 24 6d 65 74 68 6f 64 20 7b 0a ch -- $method {.
0660: 09 09 22 72 6f 74 61 74 65 5f 73 75 62 73 74 22 .."rotate_subst"
0670: 20 7b 0a 09 09 09 73 65 74 20 6b 65 79 28 6d 65 {....set key(me
0680: 74 68 6f 64 29 20 24 6d 65 74 68 6f 64 0a 09 09 thod) $method...
0690: 09 73 65 74 20 6b 65 79 28 72 6f 74 61 74 65 5f .set key(rotate_
06a0: 6c 65 6e 67 74 68 29 20 5b 72 61 6e 64 6f 6d 5f length) [random_
06b0: 62 79 74 65 5d 0a 0a 09 09 09 73 65 74 20 6b 65 byte].....set ke
06c0: 79 5f 64 61 74 61 20 5b 6c 69 73 74 5d 0a 09 09 y_data [list]...
06d0: 09 77 68 69 6c 65 20 7b 5b 6c 6c 65 6e 67 74 68 .while {[llength
06e0: 20 24 6b 65 79 5f 64 61 74 61 5d 20 21 3d 20 32 $key_data] != 2
06f0: 35 36 7d 20 7b 0a 09 09 09 09 73 65 74 20 76 61 56} {.....set va
0700: 6c 75 65 20 5b 72 61 6e 64 6f 6d 5f 62 79 74 65 lue [random_byte
0710: 5d 0a 09 09 09 09 69 66 20 7b 5b 6c 73 65 61 72 ].....if {[lsear
0720: 63 68 20 2d 65 78 61 63 74 20 24 6b 65 79 5f 64 ch -exact $key_d
0730: 61 74 61 20 24 76 61 6c 75 65 5d 20 21 3d 20 2d ata $value] != -
0740: 31 7d 20 7b 0a 09 09 09 09 09 63 6f 6e 74 69 6e 1} {......contin
0750: 75 65 0a 09 09 09 09 7d 0a 0a 09 09 09 09 6c 61 ue.....}......la
0760: 70 70 65 6e 64 20 6b 65 79 5f 64 61 74 61 20 24 ppend key_data $
0770: 76 61 6c 75 65 0a 09 09 09 7d 0a 0a 09 09 09 66 value....}.....f
0780: 6f 72 65 61 63 68 20 76 61 6c 75 65 20 24 6b 65 oreach value $ke
0790: 79 5f 64 61 74 61 20 7b 0a 09 09 09 09 61 70 70 y_data {.....app
07a0: 65 6e 64 20 6b 65 79 28 73 75 62 73 74 29 20 5b end key(subst) [
07b0: 66 6f 72 6d 61 74 20 25 63 20 24 76 61 6c 75 65 format %c $value
07c0: 5d 0a 09 09 09 7d 0a 0a 09 09 09 72 65 74 75 72 ]....}.....retur
07d0: 6e 20 5b 61 72 72 61 79 20 67 65 74 20 6b 65 79 n [array get key
07e0: 5d 0a 09 09 7d 0a 09 7d 0a 09 65 72 72 6f 72 20 ]...}..}..error
07f0: 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 "not implemented
0800: 22 0a 7d 0a 0a 70 72 6f 63 20 65 6e 63 72 79 70 ".}..proc encryp
0810: 74 5f 6b 65 79 5f 65 78 70 6f 72 74 20 7b 6b 65 t_key_export {ke
0820: 79 5f 64 69 63 74 20 74 61 72 67 65 74 7d 20 7b y_dict target} {
0830: 0a 09 61 72 72 61 79 20 73 65 74 20 6b 65 79 20 ..array set key
0840: 24 6b 65 79 5f 64 69 63 74 0a 0a 09 73 77 69 74 $key_dict...swit
0850: 63 68 20 2d 2d 20 24 6b 65 79 28 6d 65 74 68 6f ch -- $key(metho
0860: 64 29 20 7b 0a 09 09 22 72 6f 74 61 74 65 5f 73 d) {..."rotate_s
0870: 75 62 73 74 22 20 7b 0a 09 09 09 73 77 69 74 63 ubst" {....switc
0880: 68 20 2d 2d 20 24 74 61 72 67 65 74 20 7b 0a 09 h -- $target {..
0890: 09 09 09 22 63 22 20 7b 0a 09 09 09 09 09 73 65 ..."c" {......se
08a0: 74 20 72 65 74 76 61 6c 20 22 2e 74 79 70 65 20 t retval ".type
08b0: 3d 20 43 56 46 53 5f 4b 45 59 54 59 50 45 5f 52 = CVFS_KEYTYPE_R
08c0: 4f 54 41 54 45 5f 53 55 42 53 54 2c 5c 6e 22 0a OTATE_SUBST,\n".
08d0: 09 09 09 09 09 61 70 70 65 6e 64 20 72 65 74 76 .....append retv
08e0: 61 6c 20 22 2e 74 79 70 65 64 61 74 61 2e 72 6f al ".typedata.ro
08f0: 74 61 74 65 5f 73 75 62 73 74 2e 72 6f 74 61 74 tate_subst.rotat
0900: 65 5f 6c 65 6e 67 74 68 20 3d 20 24 6b 65 79 28 e_length = $key(
0910: 72 6f 74 61 74 65 5f 6c 65 6e 67 74 68 29 2c 5c rotate_length),\
0920: 6e 22 0a 09 09 09 09 09 61 70 70 65 6e 64 20 72 n"......append r
0930: 65 74 76 61 6c 20 22 2e 74 79 70 65 64 61 74 61 etval ".typedata
0940: 2e 72 6f 74 61 74 65 5f 73 75 62 73 74 2e 73 75 .rotate_subst.su
0950: 62 73 74 20 20 20 20 20 20 20 20 20 3d 20 28 75 bst = (u
0960: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 nsigned char *)
0970: 5b 73 74 72 69 6e 67 69 66 79 20 24 6b 65 79 28 [stringify $key(
0980: 73 75 62 73 74 29 5d 5c 6e 22 0a 0a 09 09 09 09 subst)]\n"......
0990: 09 72 65 74 75 72 6e 20 24 72 65 74 76 61 6c 0a .return $retval.
09a0: 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 ....}....}...}..
09b0: 7d 0a 0a 09 65 72 72 6f 72 20 22 6e 6f 74 20 69 }...error "not i
09c0: 6d 70 6c 65 6d 65 6e 74 65 64 22 0a 7d 0a 0a 70 mplemented".}..p
09d0: 72 6f 63 20 65 6e 63 72 79 70 74 20 7b 64 61 74 roc encrypt {dat
09e0: 61 20 6b 65 79 5f 64 69 63 74 20 7b 64 65 63 72 a key_dict {decr
09f0: 79 70 74 20 30 7d 7d 20 7b 0a 09 61 72 72 61 79 ypt 0}} {..array
0a00: 20 73 65 74 20 6b 65 79 20 24 6b 65 79 5f 64 69 set key $key_di
0a10: 63 74 0a 0a 09 73 77 69 74 63 68 20 2d 2d 20 24 ct...switch -- $
0a20: 6b 65 79 28 6d 65 74 68 6f 64 29 20 7b 0a 09 09 key(method) {...
0a30: 22 72 6f 74 61 74 65 5f 73 75 62 73 74 22 20 7b "rotate_subst" {
0a40: 0a 09 09 09 73 65 74 20 72 65 74 76 61 6c 20 22 ....set retval "
0a50: 22 0a 09 09 09 73 65 74 20 64 61 74 61 6c 65 6e "....set datalen
0a60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length
0a70: 24 64 61 74 61 5d 0a 0a 09 09 09 66 6f 72 20 7b $data].....for {
0a80: 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 set i 0} {$i < $
0a90: 64 61 74 61 6c 65 6e 7d 20 7b 69 6e 63 72 20 69 datalen} {incr i
0aa0: 20 24 6b 65 79 28 72 6f 74 61 74 65 5f 6c 65 6e $key(rotate_len
0ab0: 67 74 68 29 7d 20 7b 0a 09 09 09 09 73 65 74 20 gth)} {.....set
0ac0: 6d 61 70 20 5b 6c 69 73 74 5d 0a 09 09 09 09 66 map [list].....f
0ad0: 6f 72 20 7b 73 65 74 20 6a 20 30 7d 20 7b 24 6a or {set j 0} {$j
0ae0: 20 3c 20 32 35 36 7d 20 7b 69 6e 63 72 20 6a 7d < 256} {incr j}
0af0: 20 7b 0a 09 09 09 09 09 69 66 20 7b 24 64 65 63 {......if {$dec
0b00: 72 79 70 74 7d 20 7b 0a 09 09 09 09 09 09 6c 61 rypt} {.......la
0b10: 70 70 65 6e 64 20 6d 61 70 20 5b 66 6f 72 6d 61 ppend map [forma
0b20: 74 20 25 63 20 24 6a 5d 20 5b 73 74 72 69 6e 67 t %c $j] [string
0b30: 20 69 6e 64 65 78 20 24 6b 65 79 28 73 75 62 73 index $key(subs
0b40: 74 29 20 24 6a 5d 0a 09 09 09 09 09 7d 20 65 6c t) $j]......} el
0b50: 73 65 20 7b 0a 09 09 09 09 09 09 6c 61 70 70 65 se {.......lappe
0b60: 6e 64 20 6d 61 70 20 5b 73 74 72 69 6e 67 20 69 nd map [string i
0b70: 6e 64 65 78 20 24 6b 65 79 28 73 75 62 73 74 29 ndex $key(subst)
0b80: 20 24 6a 5d 20 5b 66 6f 72 6d 61 74 20 25 63 20 $j] [format %c
0b90: 24 6a 5d 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d $j]......}.....}
0ba0: 0a 0a 09 09 09 09 73 65 74 20 65 6e 64 20 5b 65 ......set end [e
0bb0: 78 70 72 20 7b 24 69 20 2b 20 24 6b 65 79 28 72 xpr {$i + $key(r
0bc0: 6f 74 61 74 65 5f 6c 65 6e 67 74 68 29 20 2d 20 otate_length) -
0bd0: 31 7d 5d 0a 0a 09 09 09 09 73 65 74 20 62 6c 6f 1}]......set blo
0be0: 63 6b 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 ck [string range
0bf0: 20 24 64 61 74 61 20 24 69 20 24 65 6e 64 5d 0a $data $i $end].
0c00: 09 09 09 09 73 65 74 20 62 6c 6f 63 6b 20 5b 73 ....set block [s
0c10: 74 72 69 6e 67 20 6d 61 70 20 24 6d 61 70 20 24 tring map $map $
0c20: 62 6c 6f 63 6b 5d 0a 0a 09 09 09 09 61 70 70 65 block]......appe
0c30: 6e 64 20 72 65 74 76 61 6c 20 24 62 6c 6f 63 6b nd retval $block
0c40: 0a 0a 09 09 09 09 73 65 74 20 6b 65 79 5f 65 6e ......set key_en
0c50: 64 20 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 d [string index
0c60: 24 6b 65 79 28 73 75 62 73 74 29 20 30 5d 0a 09 $key(subst) 0]..
0c70: 09 09 09 73 65 74 20 6b 65 79 28 73 75 62 73 74 ...set key(subst
0c80: 29 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 ) [string range
0c90: 24 6b 65 79 28 73 75 62 73 74 29 20 31 20 65 6e $key(subst) 1 en
0ca0: 64 5d 24 6b 65 79 5f 65 6e 64 0a 09 09 09 7d 0a d]$key_end....}.
0cb0: 0a 09 09 09 72 65 74 75 72 6e 20 24 72 65 74 76 ....return $retv
0cc0: 61 6c 0a 09 09 7d 0a 09 09 22 61 65 73 22 20 7b al...}..."aes" {
0cd0: 0a 09 09 09 70 61 63 6b 61 67 65 20 72 65 71 75 ....package requ
0ce0: 69 72 65 20 61 65 73 0a 09 09 7d 0a 09 7d 0a 09 ire aes...}..}..
0cf0: 65 72 72 6f 72 20 22 6e 6f 74 20 69 6d 70 6c 65 error "not imple
0d00: 6d 65 6e 74 65 64 22 0a 7d 0a 0a 70 72 6f 63 20 mented".}..proc
0d10: 64 65 63 72 79 70 74 20 7b 64 61 74 61 20 6b 65 decrypt {data ke
0d20: 79 5f 64 69 63 74 7d 20 7b 0a 09 72 65 74 75 72 y_dict} {..retur
0d30: 6e 20 5b 65 6e 63 72 79 70 74 20 24 64 61 74 61 n [encrypt $data
0d40: 20 24 6b 65 79 5f 64 69 63 74 20 31 5d 0a 7d 0a $key_dict 1].}.
0d50: 0a 23 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e .# This function
0d60: 20 6d 75 73 74 20 62 65 20 6b 65 70 74 20 69 6e must be kept in
0d70: 2d 73 79 6e 63 20 77 69 74 68 20 74 68 65 20 67 -sync with the g
0d80: 65 6e 65 72 61 74 65 64 20 43 20 66 75 6e 63 74 enerated C funct
0d90: 69 6f 6e 20 62 65 6c 6f 77 0a 70 72 6f 63 20 63 ion below.proc c
0da0: 76 66 73 5f 68 61 73 68 20 7b 70 61 74 68 7d 20 vfs_hash {path}
0db0: 7b 0a 09 73 65 74 20 68 20 30 0a 09 73 65 74 20 {..set h 0..set
0dc0: 67 20 30 0a 0a 09 66 6f 72 20 7b 73 65 74 20 69 g 0...for {set i
0dd0: 64 78 20 30 7d 20 7b 24 69 64 78 20 3c 20 5b 73 dx 0} {$idx < [s
0de0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 61 tring length $pa
0df0: 74 68 5d 7d 20 7b 69 6e 63 72 20 69 64 78 7d 20 th]} {incr idx}
0e00: 7b 0a 09 09 62 69 6e 61 72 79 20 73 63 61 6e 20 {...binary scan
0e10: 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 70 [string index $p
0e20: 61 74 68 20 24 69 64 78 5d 20 48 2a 20 63 68 61 ath $idx] H* cha
0e30: 72 0a 09 09 73 65 74 20 63 68 61 72 20 22 30 78 r...set char "0x
0e40: 24 63 68 61 72 22 0a 0a 09 09 73 65 74 20 68 20 $char"....set h
0e50: 5b 65 78 70 72 20 7b 28 24 68 20 3c 3c 20 34 29 [expr {($h << 4)
0e60: 20 2b 20 24 63 68 61 72 7d 5d 0a 09 09 73 65 74 + $char}]...set
0e70: 20 67 20 5b 65 78 70 72 20 7b 24 68 20 26 20 30 g [expr {$h & 0
0e80: 78 66 30 30 30 30 30 30 30 7d 5d 0a 09 09 69 66 xf0000000}]...if
0e90: 20 7b 24 67 20 21 3d 20 30 7d 20 7b 0a 09 09 09 {$g != 0} {....
0ea0: 73 65 74 20 68 20 5b 65 78 70 72 20 7b 28 24 68 set h [expr {($h
0eb0: 20 26 20 30 78 66 66 66 66 66 66 66 66 29 20 5e & 0xffffffff) ^
0ec0: 20 28 24 67 20 3e 3e 20 32 34 29 7d 5d 0a 09 09 ($g >> 24)}]...
0ed0: 7d 0a 0a 09 09 73 65 74 20 68 20 5b 65 78 70 72 }....set h [expr
0ee0: 20 7b 24 68 20 26 20 28 28 7e 24 67 29 20 26 20 {$h & ((~$g) &
0ef0: 30 78 66 66 66 66 66 66 66 66 29 7d 5d 0a 09 7d 0xffffffff)}]..}
0f00: 0a 0a 09 72 65 74 75 72 6e 20 24 68 0a 7d 0a 0a ...return $h.}..
0f10: 23 20 49 66 20 65 6e 63 72 79 70 74 69 6f 6e 20 # If encryption
0f20: 69 73 20 72 65 71 75 65 73 74 65 64 2c 20 67 65 is requested, ge
0f30: 6e 65 72 61 74 65 20 61 20 6b 65 79 0a 69 66 20 nerate a key.if
0f40: 7b 24 6f 62 73 66 75 63 61 74 65 7d 20 7b 0a 09 {$obsfucate} {..
0f50: 73 65 74 20 6f 62 73 66 75 63 61 74 69 6f 6e 5f set obsfucation_
0f60: 6b 65 79 20 5b 65 6e 63 72 79 70 74 5f 6b 65 79 key [encrypt_key
0f70: 5f 67 65 6e 65 72 61 74 65 20 22 72 6f 74 61 74 _generate "rotat
0f80: 65 5f 73 75 62 73 74 22 5d 0a 7d 0a 0a 23 20 47 e_subst"].}..# G
0f90: 65 6e 65 72 61 74 65 20 6c 69 73 74 20 6f 66 20 enerate list of
0fa0: 66 69 6c 65 73 20 74 6f 20 69 6e 63 6c 75 64 65 files to include
0fb0: 20 69 6e 20 6f 75 74 70 75 74 0a 73 65 74 20 66 in output.set f
0fc0: 69 6c 65 73 20 5b 72 65 63 75 72 73 69 76 65 5f iles [recursive_
0fd0: 67 6c 6f 62 20 24 73 74 61 72 74 64 69 72 5d 0a glob $startdir].
0fe0: 0a 23 20 49 6e 73 65 72 74 20 64 75 6d 6d 79 20 .# Insert dummy
0ff0: 65 6e 74 72 79 20 63 6f 6f 72 65 73 70 6f 6e 64 entry coorespond
1000: 69 6e 67 20 74 6f 20 43 20 64 75 6d 6d 79 20 65 ing to C dummy e
1010: 6e 74 72 79 0a 73 65 74 20 66 69 6c 65 73 20 5b ntry.set files [
1020: 6c 69 6e 73 65 72 74 20 24 66 69 6c 65 73 20 30 linsert $files 0
1030: 20 22 5f 5f 44 55 4d 4d 59 5f 5f 22 5d 0a 0a 23 "__DUMMY__"]..#
1040: 20 50 72 6f 64 75 63 65 20 43 38 39 20 63 6f 6d Produce C89 com
1050: 70 61 74 69 62 6c 65 20 68 65 61 64 65 72 0a 73 patible header.s
1060: 65 74 20 63 70 70 5f 74 61 67 20 22 43 56 46 53 et cpp_tag "CVFS
1070: 5f 5b 73 74 72 69 6e 67 20 74 6f 75 70 70 65 72 _[string toupper
1080: 20 24 68 61 73 68 6b 65 79 5d 22 0a 73 65 74 20 $hashkey]".set
1090: 63 6f 64 65 5f 74 61 67 20 22 63 76 66 73 5f 5b code_tag "cvfs_[
10a0: 73 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 24 string tolower $
10b0: 68 61 73 68 6b 65 79 5d 22 0a 73 65 74 20 68 61 hashkey]".set ha
10c0: 73 68 6b 65 79 20 5b 73 74 72 69 6e 67 20 74 6f shkey [string to
10d0: 6c 6f 77 65 72 20 24 68 61 73 68 6b 65 79 5d 0a lower $hashkey].
10e0: 0a 70 75 74 73 20 22 23 69 66 6e 64 65 66 20 24 .puts "#ifndef $
10f0: 63 70 70 5f 74 61 67 22 0a 70 75 74 73 20 22 23 cpp_tag".puts "#
1100: 20 20 64 65 66 69 6e 65 20 24 63 70 70 5f 74 61 define $cpp_ta
1110: 67 20 31 22 0a 70 75 74 73 20 7b 0a 23 20 20 69 g 1".puts {.# i
1120: 66 64 65 66 20 48 41 56 45 5f 53 54 44 43 0a 23 fdef HAVE_STDC.#
1130: 20 20 20 20 69 66 6e 64 65 66 20 48 41 56 45 5f ifndef HAVE_
1140: 55 4e 49 53 54 44 5f 48 0a 23 20 20 20 20 20 20 UNISTD_H.#
1150: 64 65 66 69 6e 65 20 48 41 56 45 5f 55 4e 49 53 define HAVE_UNIS
1160: 54 44 5f 48 20 31 0a 23 20 20 20 20 65 6e 64 69 TD_H 1.# endi
1170: 66 0a 23 20 20 20 20 69 66 6e 64 65 66 20 48 41 f.# ifndef HA
1180: 56 45 5f 53 54 52 49 4e 47 5f 48 0a 23 20 20 20 VE_STRING_H.#
1190: 20 20 20 64 65 66 69 6e 65 20 48 41 56 45 5f 53 define HAVE_S
11a0: 54 52 49 4e 47 5f 48 20 31 0a 23 20 20 20 20 65 TRING_H 1.# e
11b0: 6e 64 69 66 0a 23 20 20 20 20 69 66 6e 64 65 66 ndif.# ifndef
11c0: 20 48 41 56 45 5f 53 54 44 4c 49 42 5f 48 0a 23 HAVE_STDLIB_H.#
11d0: 20 20 20 20 20 20 64 65 66 69 6e 65 20 48 41 56 define HAV
11e0: 45 5f 53 54 44 4c 49 42 5f 48 20 31 0a 23 20 20 E_STDLIB_H 1.#
11f0: 20 20 65 6e 64 69 66 0a 23 20 20 65 6e 64 69 66 endif.# endif
1200: 0a 23 20 20 69 66 64 65 66 20 48 41 56 45 5f 55 .# ifdef HAVE_U
1210: 4e 49 53 54 44 5f 48 0a 23 20 20 20 20 69 6e 63 NISTD_H.# inc
1220: 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a lude <unistd.h>.
1230: 23 20 20 65 6e 64 69 66 0a 23 20 20 69 66 64 65 # endif.# ifde
1240: 66 20 48 41 56 45 5f 53 54 52 49 4e 47 5f 48 0a f HAVE_STRING_H.
1250: 23 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 # include <st
1260: 72 69 6e 67 2e 68 3e 0a 23 20 20 65 6e 64 69 66 ring.h>.# endif
1270: 0a 23 20 20 69 66 64 65 66 20 48 41 56 45 5f 53 .# ifdef HAVE_S
1280: 54 44 4c 49 42 5f 48 0a 23 20 20 20 20 69 6e 63 TDLIB_H.# inc
1290: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a lude <stdlib.h>.
12a0: 23 20 20 65 6e 64 69 66 0a 23 20 20 69 6e 63 6c # endif.# incl
12b0: 75 64 65 20 3c 74 63 6c 2e 68 3e 0a 0a 23 20 20 ude <tcl.h>..#
12c0: 69 66 6e 64 65 66 20 4c 4f 41 44 45 44 5f 43 56 ifndef LOADED_CV
12d0: 46 53 5f 43 4f 4d 4d 4f 4e 0a 23 20 20 20 20 64 FS_COMMON.# d
12e0: 65 66 69 6e 65 20 4c 4f 41 44 45 44 5f 43 56 46 efine LOADED_CVF
12f0: 53 5f 43 4f 4d 4d 4f 4e 20 31 0a 0a 74 79 70 65 S_COMMON 1..type
1300: 64 65 66 20 65 6e 75 6d 20 7b 0a 09 43 56 46 53 def enum {..CVFS
1310: 5f 46 49 4c 45 54 59 50 45 5f 46 49 4c 45 20 20 _FILETYPE_FILE
1320: 20 20 20 20 20 20 20 20 20 20 3d 20 30 2c 0a 09 = 0,..
1330: 43 56 46 53 5f 46 49 4c 45 54 59 50 45 5f 44 49 CVFS_FILETYPE_DI
1340: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 R =
1350: 31 2c 0a 09 43 56 46 53 5f 46 49 4c 45 54 59 50 1,..CVFS_FILETYP
1360: 45 5f 45 4e 43 52 59 50 54 45 44 5f 46 49 4c 45 E_ENCRYPTED_FILE
1370: 20 20 3d 20 32 2c 0a 09 43 56 46 53 5f 46 49 4c = 2,..CVFS_FIL
1380: 45 54 59 50 45 5f 43 4f 4d 50 52 45 53 53 45 44 ETYPE_COMPRESSED
1390: 5f 46 49 4c 45 20 3d 20 34 2c 0a 7d 20 63 76 66 _FILE = 4,.} cvf
13a0: 73 5f 66 69 6c 65 74 79 70 65 5f 74 3b 0a 0a 73 s_filetype_t;..s
13b0: 74 72 75 63 74 20 63 76 66 73 5f 64 61 74 61 20 truct cvfs_data
13c0: 7b 0a 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 {..const char *
13d0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 name
13e0: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ;..unsigned long
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 inde
1400: 78 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e x;..unsigned lon
1410: 67 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a g siz
1420: 65 3b 0a 09 63 76 66 73 5f 66 69 6c 65 74 79 70 e;..cvfs_filetyp
1430: 65 5f 74 20 20 20 20 20 20 20 20 20 20 74 79 70 e_t typ
1440: 65 3b 0a 09 63 6f 6e 73 74 20 75 6e 73 69 67 6e e;..const unsign
1450: 65 64 20 63 68 61 72 20 2a 20 20 20 20 64 61 74 ed char * dat
1460: 61 3b 0a 09 69 6e 74 20 20 20 20 20 20 20 20 20 a;..int
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 65 fre
1480: 65 3b 0a 7d 3b 0a 0a 74 79 70 65 64 65 66 20 65 e;.};..typedef e
1490: 6e 75 6d 20 7b 0a 09 43 56 46 53 5f 4b 45 59 54 num {..CVFS_KEYT
14a0: 59 50 45 5f 52 4f 54 41 54 45 5f 53 55 42 53 54 YPE_ROTATE_SUBST
14b0: 20 20 20 20 20 3d 20 30 2c 0a 7d 20 63 76 66 73 = 0,.} cvfs
14c0: 5f 6b 65 79 74 79 70 65 5f 74 3b 0a 0a 73 74 72 _keytype_t;..str
14d0: 75 63 74 20 63 76 66 73 5f 6b 65 79 20 7b 0a 09 uct cvfs_key {..
14e0: 63 76 66 73 5f 6b 65 79 74 79 70 65 5f 74 20 74 cvfs_keytype_t t
14f0: 79 70 65 3b 0a 09 75 6e 69 6f 6e 20 7b 0a 09 09 ype;..union {...
1500: 73 74 72 75 63 74 20 7b 0a 09 09 09 69 6e 74 20 struct {....int
1510: 72 6f 74 61 74 65 5f 6c 65 6e 67 74 68 3b 0a 09 rotate_length;..
1520: 09 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 ..unsigned char
1530: 2a 73 75 62 73 74 3b 0a 09 09 7d 20 72 6f 74 61 *subst;...} rota
1540: 74 65 5f 73 75 62 73 74 3b 0a 09 7d 20 74 79 70 te_subst;..} typ
1550: 65 64 61 74 61 3b 0a 7d 3b 0a 0a 73 74 61 74 69 edata;.};..stati
1560: 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 c unsigned long
1570: 63 76 66 73 5f 68 61 73 68 28 63 6f 6e 73 74 20 cvfs_hash(const
1580: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 unsigned char *p
1590: 61 74 68 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 ath) {..unsigned
15a0: 20 6c 6f 6e 67 20 69 2c 20 68 20 3d 20 30 2c 20 long i, h = 0,
15b0: 67 20 3d 20 30 3b 0a 0a 09 66 6f 72 20 28 69 20 g = 0;...for (i
15c0: 3d 20 30 3b 20 70 61 74 68 5b 69 5d 3b 20 69 2b = 0; path[i]; i+
15d0: 2b 29 20 7b 0a 09 09 68 20 3d 20 28 68 20 3c 3c +) {...h = (h <<
15e0: 20 34 29 20 2b 20 70 61 74 68 5b 69 5d 3b 0a 09 4) + path[i];..
15f0: 09 67 20 3d 20 68 20 26 20 30 78 66 30 30 30 30 .g = h & 0xf0000
1600: 30 30 30 3b 0a 09 09 69 66 20 28 67 29 20 7b 0a 000;...if (g) {.
1610: 09 09 09 68 20 5e 3d 20 28 67 20 3e 3e 20 32 34 ...h ^= (g >> 24
1620: 29 3b 0a 09 09 7d 0a 09 09 68 20 26 3d 20 28 28 );...}...h &= ((
1630: 7e 67 29 20 26 20 30 78 66 66 66 66 66 66 66 66 ~g) & 0xffffffff
1640: 4c 55 29 3b 0a 09 7d 0a 20 20 20 20 20 20 20 20 LU);..}.
1650: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 28 . return(
1660: 68 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e h);.}..static in
1670: 74 20 63 76 66 73 5f 64 65 63 72 79 70 74 28 75 t cvfs_decrypt(u
1680: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 6f 75 nsigned char *ou
1690: 74 2c 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 t, const unsigne
16a0: 64 20 63 68 61 72 20 2a 69 6e 2c 20 75 6e 73 69 d char *in, unsi
16b0: 67 6e 65 64 20 6c 6f 6e 67 20 6f 66 66 73 65 74 gned long offset
16c0: 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 , unsigned long
16d0: 69 6e 5f 6f 75 74 5f 6c 65 6e 67 74 68 2c 20 73 in_out_length, s
16e0: 74 72 75 63 74 20 63 76 66 73 5f 6b 65 79 20 2a truct cvfs_key *
16f0: 6b 65 79 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 key) {..unsigned
1700: 20 6c 6f 6e 67 20 69 3b 0a 09 75 6e 73 69 67 6e long i;..unsign
1710: 65 64 20 63 68 61 72 20 69 6e 5f 63 68 2c 20 6f ed char in_ch, o
1720: 75 74 5f 63 68 3b 0a 09 69 6e 74 20 63 68 5f 69 ut_ch;..int ch_i
1730: 64 78 3b 0a 0a 09 66 6f 72 20 28 69 20 3d 20 6f dx;...for (i = o
1740: 66 66 73 65 74 3b 20 69 20 3c 20 69 6e 5f 6f 75 ffset; i < in_ou
1750: 74 5f 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b t_length; i++) {
1760: 0a 09 09 69 6e 5f 63 68 20 3d 20 69 6e 5b 69 5d ...in_ch = in[i]
1770: 3b 0a 0a 09 09 63 68 5f 69 64 78 20 3d 20 28 69 ;....ch_idx = (i
1780: 6e 5f 63 68 20 2b 20 28 69 20 2f 20 6b 65 79 2d n_ch + (i / key-
1790: 3e 74 79 70 65 64 61 74 61 2e 72 6f 74 61 74 65 >typedata.rotate
17a0: 5f 73 75 62 73 74 2e 72 6f 74 61 74 65 5f 6c 65 _subst.rotate_le
17b0: 6e 67 74 68 29 29 20 25 20 32 35 36 3b 0a 0a 09 ngth)) % 256;...
17c0: 09 6f 75 74 5f 63 68 20 3d 20 6b 65 79 2d 3e 74 .out_ch = key->t
17d0: 79 70 65 64 61 74 61 2e 72 6f 74 61 74 65 5f 73 ypedata.rotate_s
17e0: 75 62 73 74 2e 73 75 62 73 74 5b 63 68 5f 69 64 ubst.subst[ch_id
17f0: 78 5d 3b 0a 09 09 6f 75 74 5b 69 5d 20 3d 20 6f x];...out[i] = o
1800: 75 74 5f 63 68 3b 0a 09 7d 0a 0a 09 72 65 74 75 ut_ch;..}...retu
1810: 72 6e 28 30 29 3b 0a 7d 0a 0a 23 20 20 65 6e 64 rn(0);.}..# end
1820: 69 66 20 2f 2a 20 21 4c 4f 41 44 45 44 5f 43 56 if /* !LOADED_CV
1830: 46 53 5f 43 4f 4d 4d 4f 4e 20 2a 2f 7d 0a 70 75 FS_COMMON */}.pu
1840: 74 73 20 22 22 0a 0a 70 75 74 73 20 22 73 74 61 ts ""..puts "sta
1850: 74 69 63 20 73 74 72 75 63 74 20 63 76 66 73 5f tic struct cvfs_
1860: 64 61 74 61 20 24 7b 63 6f 64 65 5f 74 61 67 7d data ${code_tag}
1870: 5f 64 61 74 61 5c 5b 5c 5d 20 3d 20 7b 22 0a 70 _data\[\] = {".p
1880: 75 74 73 20 22 5c 74 7b 22 0a 70 75 74 73 20 22 uts "\t{".puts "
1890: 5c 74 5c 74 2f 2a 20 49 6e 64 65 78 20 30 20 63 \t\t/* Index 0 c
18a0: 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 62 65 annot be used be
18b0: 63 61 75 73 65 20 77 65 20 75 73 65 20 74 68 65 cause we use the
18c0: 20 76 61 6c 75 65 20 30 20 74 6f 20 72 65 70 72 value 0 to repr
18d0: 65 73 65 6e 74 20 66 61 69 6c 75 72 65 20 2a 2f esent failure */
18e0: 22 0a 70 75 74 73 20 22 5c 74 5c 74 2e 6e 61 6d ".puts "\t\t.nam
18f0: 65 20 20 3d 20 4e 55 4c 4c 2c 22 0a 70 75 74 73 e = NULL,".puts
1900: 20 22 5c 74 5c 74 2e 69 6e 64 65 78 20 3d 20 30 "\t\t.index = 0
1910: 2c 22 0a 70 75 74 73 20 22 5c 74 5c 74 2e 74 79 ,".puts "\t\t.ty
1920: 70 65 20 20 3d 20 30 2c 22 0a 70 75 74 73 20 22 pe = 0,".puts "
1930: 5c 74 5c 74 2e 73 69 7a 65 20 20 3d 20 30 2c 22 \t\t.size = 0,"
1940: 0a 70 75 74 73 20 22 5c 74 5c 74 2e 64 61 74 61 .puts "\t\t.data
1950: 20 20 3d 20 4e 55 4c 4c 2c 22 0a 70 75 74 73 20 = NULL,".puts
1960: 22 5c 74 5c 74 2e 66 72 65 65 20 20 3d 20 30 2c "\t\t.free = 0,
1970: 22 0a 70 75 74 73 20 22 5c 74 7d 2c 22 0a 66 6f ".puts "\t},".fo
1980: 72 20 7b 73 65 74 20 69 64 78 20 31 7d 20 7b 24 r {set idx 1} {$
1990: 69 64 78 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 idx < [llength $
19a0: 66 69 6c 65 73 5d 7d 20 7b 69 6e 63 72 20 69 64 files]} {incr id
19b0: 78 7d 20 7b 0a 09 73 65 74 20 66 69 6c 65 20 5b x} {..set file [
19c0: 6c 69 6e 64 65 78 20 24 66 69 6c 65 73 20 24 69 lindex $files $i
19d0: 64 78 5d 0a 09 73 65 74 20 73 68 6f 72 74 66 69 dx]..set shortfi
19e0: 6c 65 20 5b 73 68 6f 72 74 65 6e 5f 66 69 6c 65 le [shorten_file
19f0: 20 24 73 74 61 72 74 64 69 72 20 24 66 69 6c 65 $startdir $file
1a00: 5d 0a 0a 09 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d ]...unset -nocom
1a10: 70 6c 61 69 6e 20 66 69 6e 66 6f 20 74 79 70 65 plain finfo type
1a20: 0a 09 66 69 6c 65 20 73 74 61 74 20 24 66 69 6c ..file stat $fil
1a30: 65 20 66 69 6e 66 6f 0a 0a 09 73 77 69 74 63 68 e finfo...switch
1a40: 20 2d 2d 20 24 66 69 6e 66 6f 28 74 79 70 65 29 -- $finfo(type)
1a50: 20 7b 0a 09 09 22 66 69 6c 65 22 20 7b 0a 09 09 {..."file" {...
1a60: 09 73 65 74 20 73 69 7a 65 20 24 66 69 6e 66 6f .set size $finfo
1a70: 28 73 69 7a 65 29 0a 0a 09 09 09 73 65 74 20 66 (size).....set f
1a80: 64 20 5b 6f 70 65 6e 20 24 66 69 6c 65 5d 0a 09 d [open $file]..
1a90: 09 09 66 63 6f 6e 66 69 67 75 72 65 20 24 66 64 ..fconfigure $fd
1aa0: 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 -translation bi
1ab0: 6e 61 72 79 0a 09 09 09 73 65 74 20 64 61 74 61 nary....set data
1ac0: 20 5b 72 65 61 64 20 24 66 64 5d 0a 09 09 09 63 [read $fd]....c
1ad0: 6c 6f 73 65 20 24 66 64 0a 0a 09 09 09 69 66 20 lose $fd.....if
1ae0: 7b 24 6f 62 73 66 75 63 61 74 65 7d 20 7b 0a 09 {$obsfucate} {..
1af0: 09 09 09 73 65 74 20 74 79 70 65 20 22 43 56 46 ...set type "CVF
1b00: 53 5f 46 49 4c 45 54 59 50 45 5f 45 4e 43 52 59 S_FILETYPE_ENCRY
1b10: 50 54 45 44 5f 46 49 4c 45 22 0a 09 09 09 09 73 PTED_FILE".....s
1b20: 65 74 20 64 61 74 61 20 22 28 75 6e 73 69 67 6e et data "(unsign
1b30: 65 64 20 63 68 61 72 20 2a 29 20 5b 73 74 72 69 ed char *) [stri
1b40: 6e 67 69 66 79 20 5b 65 6e 63 72 79 70 74 20 24 ngify [encrypt $
1b50: 64 61 74 61 20 24 6f 62 73 66 75 63 61 74 69 6f data $obsfucatio
1b60: 6e 5f 6b 65 79 5d 5d 22 0a 09 09 09 7d 20 65 6c n_key]]"....} el
1b70: 73 65 20 7b 0a 09 09 09 09 73 65 74 20 74 79 70 se {.....set typ
1b80: 65 20 22 43 56 46 53 5f 46 49 4c 45 54 59 50 45 e "CVFS_FILETYPE
1b90: 5f 46 49 4c 45 22 0a 09 09 09 09 73 65 74 20 64 _FILE".....set d
1ba0: 61 74 61 20 22 28 75 6e 73 69 67 6e 65 64 20 63 ata "(unsigned c
1bb0: 68 61 72 20 2a 29 20 5b 73 74 72 69 6e 67 69 66 har *) [stringif
1bc0: 79 20 24 64 61 74 61 5d 22 0a 09 09 09 7d 0a 09 y $data]"....}..
1bd0: 09 7d 0a 09 09 22 64 69 72 65 63 74 6f 72 79 22 .}..."directory"
1be0: 20 7b 0a 09 09 09 73 65 74 20 74 79 70 65 20 22 {....set type "
1bf0: 43 56 46 53 5f 46 49 4c 45 54 59 50 45 5f 44 49 CVFS_FILETYPE_DI
1c00: 52 22 0a 09 09 09 73 65 74 20 64 61 74 61 20 22 R"....set data "
1c10: 4e 55 4c 4c 22 0a 09 09 09 73 65 74 20 73 69 7a NULL"....set siz
1c20: 65 20 30 0a 09 09 7d 0a 09 7d 0a 0a 09 70 75 74 e 0...}..}...put
1c30: 73 20 22 5c 74 7b 22 0a 09 70 75 74 73 20 22 5c s "\t{"..puts "\
1c40: 74 5c 74 2e 6e 61 6d 65 20 20 3d 20 5c 22 24 73 t\t.name = \"$s
1c50: 68 6f 72 74 66 69 6c 65 5c 22 2c 22 0a 09 70 75 hortfile\","..pu
1c60: 74 73 20 22 5c 74 5c 74 2e 69 6e 64 65 78 20 3d ts "\t\t.index =
1c70: 20 24 69 64 78 2c 22 0a 09 70 75 74 73 20 22 5c $idx,"..puts "\
1c80: 74 5c 74 2e 74 79 70 65 20 20 3d 20 24 74 79 70 t\t.type = $typ
1c90: 65 2c 22 0a 09 70 75 74 73 20 22 5c 74 5c 74 2e e,"..puts "\t\t.
1ca0: 73 69 7a 65 20 20 3d 20 24 73 69 7a 65 2c 22 0a size = $size,".
1cb0: 09 70 75 74 73 20 22 5c 74 5c 74 2e 64 61 74 61 .puts "\t\t.data
1cc0: 20 20 3d 20 24 64 61 74 61 2c 22 0a 09 70 75 74 = $data,"..put
1cd0: 73 20 22 5c 74 5c 74 2e 66 72 65 65 20 20 3d 20 s "\t\t.free =
1ce0: 30 2c 22 0a 09 70 75 74 73 20 22 5c 74 7d 2c 22 0,"..puts "\t},"
1cf0: 0a 7d 0a 70 75 74 73 20 22 7d 3b 22 0a 70 75 74 .}.puts "};".put
1d00: 73 20 22 22 0a 0a 70 75 74 73 20 22 73 74 61 74 s ""..puts "stat
1d10: 69 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ic unsigned long
1d20: 20 24 7b 63 6f 64 65 5f 74 61 67 7d 5f 6c 6f 6f ${code_tag}_loo
1d30: 6b 75 70 5f 69 6e 64 65 78 28 63 6f 6e 73 74 20 kup_index(const
1d40: 63 68 61 72 20 2a 70 61 74 68 29 20 7b 22 0a 70 char *path) {".p
1d50: 75 74 73 20 22 5c 74 73 77 69 74 63 68 20 28 63 uts "\tswitch (c
1d60: 76 66 73 5f 68 61 73 68 28 28 75 6e 73 69 67 6e vfs_hash((unsign
1d70: 65 64 20 63 68 61 72 20 2a 29 20 70 61 74 68 29 ed char *) path)
1d80: 29 20 7b 22 0a 0a 66 6f 72 20 7b 73 65 74 20 69 ) {"..for {set i
1d90: 64 78 20 31 7d 20 7b 24 69 64 78 20 3c 20 5b 6c dx 1} {$idx < [l
1da0: 6c 65 6e 67 74 68 20 24 66 69 6c 65 73 5d 7d 20 length $files]}
1db0: 7b 69 6e 63 72 20 69 64 78 7d 20 7b 0a 09 73 65 {incr idx} {..se
1dc0: 74 20 66 69 6c 65 20 5b 6c 69 6e 64 65 78 20 24 t file [lindex $
1dd0: 66 69 6c 65 73 20 24 69 64 78 5d 0a 09 73 65 74 files $idx]..set
1de0: 20 73 68 6f 72 74 66 69 6c 65 20 5b 73 68 6f 72 shortfile [shor
1df0: 74 65 6e 5f 66 69 6c 65 20 24 73 74 61 72 74 64 ten_file $startd
1e00: 69 72 20 24 66 69 6c 65 5d 0a 09 73 65 74 20 68 ir $file]..set h
1e10: 61 73 68 20 5b 63 76 66 73 5f 68 61 73 68 20 24 ash [cvfs_hash $
1e20: 73 68 6f 72 74 66 69 6c 65 5d 0a 0a 09 6c 61 70 shortfile]...lap
1e30: 70 65 6e 64 20 69 6e 64 65 78 65 73 5f 70 65 72 pend indexes_per
1e40: 5f 68 61 73 68 28 24 68 61 73 68 29 20 5b 6c 69 _hash($hash) [li
1e50: 73 74 20 24 73 68 6f 72 74 66 69 6c 65 20 24 69 st $shortfile $i
1e60: 64 78 5d 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b dx].}..foreach {
1e70: 68 61 73 68 20 69 64 78 5f 6c 69 73 74 7d 20 5b hash idx_list} [
1e80: 61 72 72 61 79 20 67 65 74 20 69 6e 64 65 78 65 array get indexe
1e90: 73 5f 70 65 72 5f 68 61 73 68 5d 20 7b 0a 09 70 s_per_hash] {..p
1ea0: 75 74 73 20 22 5c 74 5c 74 63 61 73 65 20 24 68 uts "\t\tcase $h
1eb0: 61 73 68 3a 22 0a 0a 09 69 66 20 7b 5b 6c 6c 65 ash:"...if {[lle
1ec0: 6e 67 74 68 20 24 69 64 78 5f 6c 69 73 74 5d 20 ngth $idx_list]
1ed0: 3d 3d 20 31 7d 20 7b 0a 09 09 73 65 74 20 69 64 == 1} {...set id
1ee0: 78 20 5b 6c 69 6e 64 65 78 20 24 69 64 78 5f 6c x [lindex $idx_l
1ef0: 69 73 74 20 30 20 31 5d 0a 0a 09 09 70 75 74 73 ist 0 1]....puts
1f00: 20 22 5c 74 5c 74 5c 74 72 65 74 75 72 6e 28 24 "\t\t\treturn($
1f10: 69 64 78 29 3b 22 0a 09 7d 20 65 6c 73 65 20 7b idx);"..} else {
1f20: 0a 09 09 66 6f 72 65 61 63 68 20 69 64 78 5f 65 ...foreach idx_e
1f30: 6e 74 20 24 69 64 78 5f 6c 69 73 74 20 7b 0a 09 nt $idx_list {..
1f40: 09 09 73 65 74 20 73 68 6f 72 74 66 69 6c 65 20 ..set shortfile
1f50: 5b 6c 69 6e 64 65 78 20 24 69 64 78 5f 65 6e 74 [lindex $idx_ent
1f60: 20 30 5d 0a 09 09 09 73 65 74 20 69 64 78 20 5b 0]....set idx [
1f70: 6c 69 6e 64 65 78 20 24 69 64 78 5f 65 6e 74 20 lindex $idx_ent
1f80: 31 5d 0a 0a 09 09 09 70 75 74 73 20 22 5c 74 5c 1].....puts "\t\
1f90: 74 5c 74 69 66 20 28 73 74 72 63 6d 70 28 70 61 t\tif (strcmp(pa
1fa0: 74 68 2c 20 5c 22 24 73 68 6f 72 74 66 69 6c 65 th, \"$shortfile
1fb0: 5c 22 29 20 3d 3d 20 30 29 20 72 65 74 75 72 6e \") == 0) return
1fc0: 28 24 69 64 78 29 3b 22 0a 09 09 7d 0a 09 09 70 ($idx);"...}...p
1fd0: 75 74 73 20 22 5c 74 5c 74 5c 74 62 72 65 61 6b uts "\t\t\tbreak
1fe0: 3b 22 0a 09 7d 0a 7d 0a 0a 70 75 74 73 20 22 5c ;"..}.}..puts "\
1ff0: 74 7d 22 0a 70 75 74 73 20 22 5c 74 72 65 74 75 t}".puts "\tretu
2000: 72 6e 28 30 29 3b 22 0a 70 75 74 73 20 22 7d 22 rn(0);".puts "}"
2010: 0a 70 75 74 73 20 22 22 0a 0a 70 75 74 73 20 22 .puts ""..puts "
2020: 73 74 61 74 69 63 20 73 74 72 75 63 74 20 63 76 static struct cv
2030: 66 73 5f 64 61 74 61 20 2a 24 7b 63 6f 64 65 5f fs_data *${code_
2040: 74 61 67 7d 5f 67 65 74 44 61 74 61 28 63 6f 6e tag}_getData(con
2050: 73 74 20 63 68 61 72 20 2a 70 61 74 68 2c 20 75 st char *path, u
2060: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 6e 64 nsigned long ind
2070: 65 78 29 20 7b 22 0a 70 75 74 73 20 22 5c 74 69 ex) {".puts "\ti
2080: 66 20 28 70 61 74 68 20 21 3d 20 4e 55 4c 4c 29 f (path != NULL)
2090: 20 7b 22 0a 70 75 74 73 20 22 5c 74 5c 74 69 6e {".puts "\t\tin
20a0: 64 65 78 20 3d 20 24 7b 63 6f 64 65 5f 74 61 67 dex = ${code_tag
20b0: 7d 5f 6c 6f 6f 6b 75 70 5f 69 6e 64 65 78 28 70 }_lookup_index(p
20c0: 61 74 68 29 3b 22 0a 70 75 74 73 20 22 5c 74 7d ath);".puts "\t}
20d0: 22 0a 70 75 74 73 20 22 22 0a 70 75 74 73 20 22 ".puts "".puts "
20e0: 5c 74 69 66 20 28 69 6e 64 65 78 20 3d 3d 20 30 \tif (index == 0
20f0: 29 20 7b 22 0a 70 75 74 73 20 22 5c 74 5c 74 72 ) {".puts "\t\tr
2100: 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 22 0a 70 75 eturn(NULL);".pu
2110: 74 73 20 22 5c 74 7d 22 0a 70 75 74 73 20 22 22 ts "\t}".puts ""
2120: 0a 70 75 74 73 20 22 5c 74 69 66 20 28 70 61 74 .puts "\tif (pat
2130: 68 20 21 3d 20 4e 55 4c 4c 29 20 7b 22 0a 70 75 h != NULL) {".pu
2140: 74 73 20 22 5c 74 5c 74 69 66 20 28 73 74 72 63 ts "\t\tif (strc
2150: 6d 70 28 70 61 74 68 2c 20 24 7b 63 6f 64 65 5f mp(path, ${code_
2160: 74 61 67 7d 5f 64 61 74 61 5c 5b 69 6e 64 65 78 tag}_data\[index
2170: 5c 5d 2e 6e 61 6d 65 29 20 21 3d 20 30 29 20 7b \].name) != 0) {
2180: 22 0a 70 75 74 73 20 22 5c 74 5c 74 5c 74 72 65 ".puts "\t\t\tre
2190: 74 75 72 6e 28 4e 55 4c 4c 29 3b 22 0a 70 75 74 turn(NULL);".put
21a0: 73 20 22 5c 74 5c 74 7d 22 0a 70 75 74 73 20 22 s "\t\t}".puts "
21b0: 5c 74 7d 22 0a 70 75 74 73 20 22 22 0a 70 75 74 \t}".puts "".put
21c0: 73 20 22 5c 74 72 65 74 75 72 6e 28 26 24 7b 63 s "\treturn(&${c
21d0: 6f 64 65 5f 74 61 67 7d 5f 64 61 74 61 5c 5b 69 ode_tag}_data\[i
21e0: 6e 64 65 78 5c 5d 29 3b 22 0a 70 75 74 73 20 22 ndex\]);".puts "
21f0: 7d 22 0a 70 75 74 73 20 22 22 0a 0a 70 75 74 73 }".puts ""..puts
2200: 20 22 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 "static unsigne
2210: 64 20 6c 6f 6e 67 20 24 7b 63 6f 64 65 5f 74 61 d long ${code_ta
2220: 67 7d 5f 67 65 74 43 68 69 6c 64 72 65 6e 28 63 g}_getChildren(c
2230: 6f 6e 73 74 20 63 68 61 72 20 2a 70 61 74 68 2c onst char *path,
2240: 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a unsigned long *
2250: 6f 75 74 62 75 66 2c 20 75 6e 73 69 67 6e 65 64 outbuf, unsigned
2260: 20 6c 6f 6e 67 20 6f 75 74 62 75 66 5f 63 6f 75 long outbuf_cou
2270: 6e 74 29 20 7b 22 0a 70 75 74 73 20 22 5c 74 75 nt) {".puts "\tu
2280: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 6e 64 nsigned long ind
2290: 65 78 3b 22 0a 70 75 74 73 20 22 5c 74 75 6e 73 ex;".puts "\tuns
22a0: 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 75 6d 5f 63 igned long num_c
22b0: 68 69 6c 64 72 65 6e 20 3d 20 30 3b 22 0a 70 75 hildren = 0;".pu
22c0: 74 73 20 22 22 0a 70 75 74 73 20 22 5c 74 69 6e ts "".puts "\tin
22d0: 64 65 78 20 3d 20 24 7b 63 6f 64 65 5f 74 61 67 dex = ${code_tag
22e0: 7d 5f 6c 6f 6f 6b 75 70 5f 69 6e 64 65 78 28 70 }_lookup_index(p
22f0: 61 74 68 29 3b 22 0a 70 75 74 73 20 22 5c 74 69 ath);".puts "\ti
2300: 66 20 28 69 6e 64 65 78 20 3d 3d 20 30 29 20 7b f (index == 0) {
2310: 22 0a 70 75 74 73 20 22 5c 74 5c 74 72 65 74 75 ".puts "\t\tretu
2320: 72 6e 28 30 29 3b 22 0a 70 75 74 73 20 22 5c 74 rn(0);".puts "\t
2330: 7d 22 0a 70 75 74 73 20 22 22 0a 70 75 74 73 20 }".puts "".puts
2340: 22 5c 74 69 66 20 28 24 7b 63 6f 64 65 5f 74 61 "\tif (${code_ta
2350: 67 7d 5f 64 61 74 61 5c 5b 69 6e 64 65 78 5c 5d g}_data\[index\]
2360: 2e 74 79 70 65 20 21 3d 20 43 56 46 53 5f 46 49 .type != CVFS_FI
2370: 4c 45 54 59 50 45 5f 44 49 52 29 20 7b 22 0a 70 LETYPE_DIR) {".p
2380: 75 74 73 20 22 5c 74 5c 74 72 65 74 75 72 6e 28 uts "\t\treturn(
2390: 30 29 3b 22 0a 70 75 74 73 20 22 5c 74 7d 22 0a 0);".puts "\t}".
23a0: 70 75 74 73 20 22 22 0a 70 75 74 73 20 22 5c 74 puts "".puts "\t
23b0: 69 66 20 28 73 74 72 63 6d 70 28 70 61 74 68 2c if (strcmp(path,
23c0: 20 24 7b 63 6f 64 65 5f 74 61 67 7d 5f 64 61 74 ${code_tag}_dat
23d0: 61 5c 5b 69 6e 64 65 78 5c 5d 2e 6e 61 6d 65 29 a\[index\].name)
23e0: 20 21 3d 20 30 29 20 7b 22 0a 70 75 74 73 20 22 != 0) {".puts "
23f0: 5c 74 5c 74 72 65 74 75 72 6e 28 30 29 3b 22 0a \t\treturn(0);".
2400: 70 75 74 73 20 22 5c 74 7d 22 0a 70 75 74 73 20 puts "\t}".puts
2410: 22 22 0a 70 75 74 73 20 22 5c 74 73 77 69 74 63 "".puts "\tswitc
2420: 68 20 28 69 6e 64 65 78 29 20 7b 22 0a 0a 75 6e h (index) {"..un
2430: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 set -nocomplain
2440: 63 68 69 6c 64 72 65 6e 0a 61 72 72 61 79 20 73 children.array s
2450: 65 74 20 63 68 69 6c 64 72 65 6e 20 5b 6c 69 73 et children [lis
2460: 74 5d 0a 66 6f 72 20 7b 73 65 74 20 69 64 78 20 t].for {set idx
2470: 31 7d 20 7b 24 69 64 78 20 3c 20 5b 6c 6c 65 6e 1} {$idx < [llen
2480: 67 74 68 20 24 66 69 6c 65 73 5d 7d 20 7b 69 6e gth $files]} {in
2490: 63 72 20 69 64 78 7d 20 7b 0a 09 73 65 74 20 66 cr idx} {..set f
24a0: 69 6c 65 20 5b 6c 69 6e 64 65 78 20 24 66 69 6c ile [lindex $fil
24b0: 65 73 20 24 69 64 78 5d 0a 09 73 65 74 20 73 68 es $idx]..set sh
24c0: 6f 72 74 66 69 6c 65 20 5b 73 68 6f 72 74 65 6e ortfile [shorten
24d0: 5f 66 69 6c 65 20 24 73 74 61 72 74 64 69 72 20 _file $startdir
24e0: 24 66 69 6c 65 5d 0a 0a 09 75 6e 73 65 74 20 2d $file]...unset -
24f0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 66 69 6e 66 6f nocomplain finfo
2500: 20 74 79 70 65 0a 09 66 69 6c 65 20 73 74 61 74 type..file stat
2510: 20 24 66 69 6c 65 20 66 69 6e 66 6f 0a 0a 09 69 $file finfo...i
2520: 66 20 7b 24 66 69 6e 66 6f 28 74 79 70 65 29 20 f {$finfo(type)
2530: 21 3d 20 22 64 69 72 65 63 74 6f 72 79 22 7d 20 != "directory"}
2540: 7b 0a 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 7d {...continue;..}
2550: 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 77 ...# Determine w
2560: 68 69 63 68 20 63 68 69 6c 64 72 65 6e 20 61 72 hich children ar
2570: 65 20 75 6e 64 65 72 20 74 68 69 73 20 64 69 72 e under this dir
2580: 65 63 74 6f 72 79 0a 09 23 23 20 43 6f 6e 76 65 ectory..## Conve
2590: 72 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 rt the current p
25a0: 61 74 68 6e 61 6d 65 20 74 6f 20 61 20 72 65 67 athname to a reg
25b0: 75 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20 ular expression
25c0: 74 68 61 74 20 6d 61 74 63 68 65 73 20 65 78 61 that matches exa
25d0: 63 74 6c 79 0a 09 73 65 74 20 66 69 6c 65 5f 72 ctly..set file_r
25e0: 65 67 65 78 70 20 5b 73 74 72 69 6e 67 20 6d 61 egexp [string ma
25f0: 70 20 5b 6c 69 73 74 20 22 5c 5c 22 20 22 5c 5c p [list "\\" "\\
2600: 5c 5c 22 20 22 2e 22 20 22 5c 5c 2e 22 20 22 5c \\" "." "\\." "\
2610: 7b 22 20 22 5c 5c 5c 7b 22 20 22 5c 7d 22 20 22 {" "\\\{" "\}" "
2620: 5c 5c 5c 7d 22 20 22 2a 22 20 22 5c 5c 2a 22 5d \\\}" "*" "\\*"]
2630: 20 24 66 69 6c 65 5d 0a 0a 09 23 23 20 53 65 61 $file]...## Sea
2640: 72 63 68 20 66 6f 72 20 70 61 74 68 6e 61 6d 65 rch for pathname
2650: 73 20 77 68 69 63 68 20 73 74 61 72 74 20 77 69 s which start wi
2660: 74 68 20 65 78 61 63 74 6c 79 20 6f 75 72 20 6e th exactly our n
2670: 61 6d 65 2c 20 66 6f 6c 6c 6f 77 65 64 20 62 79 ame, followed by
2680: 20 61 20 73 6c 61 73 68 0a 09 23 23 20 66 6f 6c a slash..## fol
2690: 6c 6f 77 65 64 20 62 79 20 6e 6f 20 6d 6f 72 65 lowed by no more
26a0: 20 73 6c 61 73 68 65 73 20 28 64 69 72 65 63 74 slashes (direct
26b0: 20 64 65 73 63 65 6e 64 61 6e 74 73 29 0a 09 73 descendants)..s
26c0: 65 74 20 63 68 69 6c 64 5f 69 64 78 5f 6c 69 73 et child_idx_lis
26d0: 74 20 5b 6c 73 65 61 72 63 68 20 2d 72 65 67 65 t [lsearch -rege
26e0: 78 70 20 2d 61 6c 6c 20 24 66 69 6c 65 73 20 22 xp -all $files "
26f0: 5e 24 7b 66 69 6c 65 5f 72 65 67 65 78 70 7d 2f ^${file_regexp}/
2700: 5c 5b 5e 2f 5c 5d 2a 24 22 5d 0a 0a 09 73 65 74 \[^/\]*$"]...set
2710: 20 63 68 69 6c 64 72 65 6e 28 24 69 64 78 29 20 children($idx)
2720: 24 63 68 69 6c 64 5f 69 64 78 5f 6c 69 73 74 0a $child_idx_list.
2730: 0a 09 70 75 74 73 20 22 5c 74 5c 74 63 61 73 65 ..puts "\t\tcase
2740: 20 24 69 64 78 3a 22 0a 09 70 75 74 73 20 22 5c $idx:"..puts "\
2750: 74 5c 74 5c 74 6e 75 6d 5f 63 68 69 6c 64 72 65 t\t\tnum_childre
2760: 6e 20 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 63 68 n = [llength $ch
2770: 69 6c 64 5f 69 64 78 5f 6c 69 73 74 5d 3b 22 0a ild_idx_list];".
2780: 09 70 75 74 73 20 22 5c 74 5c 74 5c 74 62 72 65 .puts "\t\t\tbre
2790: 61 6b 3b 22 0a 09 0a 7d 0a 0a 70 75 74 73 20 22 ak;"...}..puts "
27a0: 5c 74 7d 22 0a 70 75 74 73 20 22 22 0a 70 75 74 \t}".puts "".put
27b0: 73 20 22 5c 74 69 66 20 28 6f 75 74 62 75 66 20 s "\tif (outbuf
27c0: 3d 3d 20 4e 55 4c 4c 29 20 7b 22 0a 70 75 74 73 == NULL) {".puts
27d0: 20 22 5c 74 5c 74 72 65 74 75 72 6e 28 6e 75 6d "\t\treturn(num
27e0: 5f 63 68 69 6c 64 72 65 6e 29 3b 22 0a 70 75 74 _children);".put
27f0: 73 20 22 5c 74 7d 22 0a 70 75 74 73 20 22 22 0a s "\t}".puts "".
2800: 70 75 74 73 20 22 5c 74 69 66 20 28 6e 75 6d 5f puts "\tif (num_
2810: 63 68 69 6c 64 72 65 6e 20 3e 20 6f 75 74 62 75 children > outbu
2820: 66 5f 63 6f 75 6e 74 29 20 7b 22 0a 70 75 74 73 f_count) {".puts
2830: 20 22 5c 74 5c 74 6e 75 6d 5f 63 68 69 6c 64 72 "\t\tnum_childr
2840: 65 6e 20 3d 20 6f 75 74 62 75 66 5f 63 6f 75 6e en = outbuf_coun
2850: 74 3b 22 0a 70 75 74 73 20 22 5c 74 7d 22 0a 70 t;".puts "\t}".p
2860: 75 74 73 20 22 22 0a 70 75 74 73 20 22 5c 74 69 uts "".puts "\ti
2870: 66 20 28 6e 75 6d 5f 63 68 69 6c 64 72 65 6e 20 f (num_children
2880: 3d 3d 20 30 29 20 7b 22 0a 70 75 74 73 20 22 5c == 0) {".puts "\
2890: 74 5c 74 72 65 74 75 72 6e 28 6e 75 6d 5f 63 68 t\treturn(num_ch
28a0: 69 6c 64 72 65 6e 29 3b 22 0a 70 75 74 73 20 22 ildren);".puts "
28b0: 5c 74 7d 22 0a 70 75 74 73 20 22 22 0a 70 75 74 \t}".puts "".put
28c0: 73 20 22 5c 74 69 66 20 28 6f 75 74 62 75 66 5f s "\tif (outbuf_
28d0: 63 6f 75 6e 74 20 3e 20 6e 75 6d 5f 63 68 69 6c count > num_chil
28e0: 64 72 65 6e 29 20 7b 22 0a 70 75 74 73 20 22 5c dren) {".puts "\
28f0: 74 5c 74 6f 75 74 62 75 66 5f 63 6f 75 6e 74 20 t\toutbuf_count
2900: 3d 20 6e 75 6d 5f 63 68 69 6c 64 72 65 6e 3b 22 = num_children;"
2910: 0a 70 75 74 73 20 22 5c 74 7d 22 0a 70 75 74 73 .puts "\t}".puts
2920: 20 22 22 0a 70 75 74 73 20 22 5c 74 73 77 69 74 "".puts "\tswit
2930: 63 68 20 28 69 6e 64 65 78 29 20 7b 22 0a 0a 66 ch (index) {"..f
2940: 6f 72 65 61 63 68 20 7b 69 64 78 20 63 68 69 6c oreach {idx chil
2950: 64 5f 69 64 78 5f 6c 69 73 74 7d 20 5b 61 72 72 d_idx_list} [arr
2960: 61 79 20 67 65 74 20 63 68 69 6c 64 72 65 6e 5d ay get children]
2970: 20 7b 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 {..if {[llength
2980: 20 24 63 68 69 6c 64 5f 69 64 78 5f 6c 69 73 74 $child_idx_list
2990: 5d 20 3d 3d 20 30 7d 20 7b 0a 09 09 63 6f 6e 74 ] == 0} {...cont
29a0: 69 6e 75 65 0a 09 7d 0a 0a 09 70 75 74 73 20 22 inue..}...puts "
29b0: 5c 74 5c 74 63 61 73 65 20 24 69 64 78 3a 22 0a \t\tcase $idx:".
29c0: 09 70 75 74 73 20 22 5c 74 5c 74 5c 74 73 77 69 .puts "\t\t\tswi
29d0: 74 63 68 28 6f 75 74 62 75 66 5f 63 6f 75 6e 74 tch(outbuf_count
29e0: 29 20 7b 22 0a 0a 09 66 6f 72 20 7b 73 65 74 20 ) {"...for {set
29f0: 63 68 69 6c 64 5f 69 64 78 5f 69 64 78 20 5b 65 child_idx_idx [e
2a00: 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 63 xpr {[llength $c
2a10: 68 69 6c 64 5f 69 64 78 5f 6c 69 73 74 5d 20 2d hild_idx_list] -
2a20: 20 31 7d 5d 7d 20 7b 24 63 68 69 6c 64 5f 69 64 1}]} {$child_id
2a30: 78 5f 69 64 78 20 3e 3d 20 30 7d 20 7b 69 6e 63 x_idx >= 0} {inc
2a40: 72 20 63 68 69 6c 64 5f 69 64 78 5f 69 64 78 20 r child_idx_idx
2a50: 2d 31 7d 20 7b 0a 09 09 73 65 74 20 63 68 69 6c -1} {...set chil
2a60: 64 5f 69 64 78 20 5b 6c 69 6e 64 65 78 20 24 63 d_idx [lindex $c
2a70: 68 69 6c 64 5f 69 64 78 5f 6c 69 73 74 20 24 63 hild_idx_list $c
2a80: 68 69 6c 64 5f 69 64 78 5f 69 64 78 5d 0a 0a 09 hild_idx_idx]...
2a90: 09 70 75 74 73 20 22 5c 74 5c 74 5c 74 5c 74 63 .puts "\t\t\t\tc
2aa0: 61 73 65 20 5b 65 78 70 72 20 7b 24 63 68 69 6c ase [expr {$chil
2ab0: 64 5f 69 64 78 5f 69 64 78 20 2b 20 31 7d 5d 3a d_idx_idx + 1}]:
2ac0: 22 0a 09 09 70 75 74 73 20 22 5c 74 5c 74 5c 74 "...puts "\t\t\t
2ad0: 5c 74 5c 74 6f 75 74 62 75 66 5c 5b 24 63 68 69 \t\toutbuf\[$chi
2ae0: 6c 64 5f 69 64 78 5f 69 64 78 5c 5d 20 3d 20 24 ld_idx_idx\] = $
2af0: 63 68 69 6c 64 5f 69 64 78 3b 22 0a 09 7d 0a 0a child_idx;"..}..
2b00: 09 70 75 74 73 20 22 5c 74 5c 74 5c 74 7d 22 0a .puts "\t\t\t}".
2b10: 0a 09 70 75 74 73 20 22 5c 74 5c 74 5c 74 62 72 ..puts "\t\t\tbr
2b20: 65 61 6b 3b 22 0a 7d 0a 0a 70 75 74 73 20 22 5c eak;".}..puts "\
2b30: 74 7d 22 0a 70 75 74 73 20 22 22 0a 70 75 74 73 t}".puts "".puts
2b40: 20 22 5c 74 72 65 74 75 72 6e 28 6e 75 6d 5f 63 "\treturn(num_c
2b50: 68 69 6c 64 72 65 6e 29 3b 22 0a 70 75 74 73 20 hildren);".puts
2b60: 22 7d 22 0a 70 75 74 73 20 22 22 0a 0a 69 66 20 "}".puts ""..if
2b70: 7b 24 6f 62 73 66 75 63 61 74 65 7d 20 7b 0a 09 {$obsfucate} {..
2b80: 70 75 74 73 20 22 73 74 61 74 69 63 20 76 6f 69 puts "static voi
2b90: 64 20 24 7b 63 6f 64 65 5f 74 61 67 7d 5f 64 65 d ${code_tag}_de
2ba0: 63 72 79 70 74 46 69 6c 65 28 63 6f 6e 73 74 20 cryptFile(const
2bb0: 63 68 61 72 20 2a 70 61 74 68 2c 20 73 74 72 75 char *path, stru
2bc0: 63 74 20 63 76 66 73 5f 64 61 74 61 20 2a 66 69 ct cvfs_data *fi
2bd0: 6e 66 6f 29 20 7b 22 0a 09 70 75 74 73 20 22 5c nfo) {"..puts "\
2be0: 74 73 74 61 74 69 63 20 73 74 72 75 63 74 20 63 tstatic struct c
2bf0: 76 66 73 5f 6b 65 79 20 6b 65 79 20 3d 20 7b 20 vfs_key key = {
2c00: 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 [string map [lis
2c10: 74 20 22 5c 6e 22 20 22 20 22 5d 20 5b 65 6e 63 t "\n" " "] [enc
2c20: 72 79 70 74 5f 6b 65 79 5f 65 78 70 6f 72 74 20 rypt_key_export
2c30: 24 6f 62 73 66 75 63 61 74 69 6f 6e 5f 6b 65 79 $obsfucation_key
2c40: 20 22 63 22 5d 5d 20 7d 3b 22 0a 09 70 75 74 73 "c"]] };"..puts
2c50: 20 22 5c 74 75 6e 73 69 67 6e 65 64 20 63 68 61 "\tunsigned cha
2c60: 72 20 2a 6e 65 77 5f 64 61 74 61 2c 20 2a 6f 6c r *new_data, *ol
2c70: 64 5f 64 61 74 61 3b 22 0a 09 70 75 74 73 20 22 d_data;"..puts "
2c80: 5c 74 69 6e 74 20 64 65 63 72 79 70 74 5f 72 65 \tint decrypt_re
2c90: 74 2c 20 66 72 65 65 5f 6f 6c 64 5f 64 61 74 61 t, free_old_data
2ca0: 3b 22 0a 09 70 75 74 73 20 22 22 0a 09 70 75 74 ;"..puts ""..put
2cb0: 73 20 22 5c 74 6e 65 77 5f 64 61 74 61 20 3d 20 s "\tnew_data =
2cc0: 28 76 6f 69 64 20 2a 29 20 54 63 6c 5f 41 6c 6c (void *) Tcl_All
2cd0: 6f 63 28 66 69 6e 66 6f 2d 3e 73 69 7a 65 29 3b oc(finfo->size);
2ce0: 22 0a 09 70 75 74 73 20 22 5c 74 64 65 63 72 79 "..puts "\tdecry
2cf0: 70 74 5f 72 65 74 20 3d 20 63 76 66 73 5f 64 65 pt_ret = cvfs_de
2d00: 63 72 79 70 74 28 6e 65 77 5f 64 61 74 61 2c 20 crypt(new_data,
2d10: 66 69 6e 66 6f 2d 3e 64 61 74 61 2c 20 30 2c 20 finfo->data, 0,
2d20: 66 69 6e 66 6f 2d 3e 73 69 7a 65 2c 20 26 6b 65 finfo->size, &ke
2d30: 79 29 3b 22 0a 09 70 75 74 73 20 22 5c 74 69 66 y);"..puts "\tif
2d40: 20 28 64 65 63 72 79 70 74 5f 72 65 74 20 21 3d (decrypt_ret !=
2d50: 20 30 29 20 7b 22 0a 09 70 75 74 73 20 22 5c 74 0) {"..puts "\t
2d60: 5c 74 54 63 6c 5f 46 72 65 65 28 28 76 6f 69 64 \tTcl_Free((void
2d70: 20 2a 29 20 6e 65 77 5f 64 61 74 61 29 3b 22 0a *) new_data);".
2d80: 09 70 75 74 73 20 22 22 0a 09 70 75 74 73 20 22 .puts ""..puts "
2d90: 5c 74 5c 74 72 65 74 75 72 6e 3b 22 0a 09 70 75 \t\treturn;"..pu
2da0: 74 73 20 22 5c 74 7d 22 0a 09 70 75 74 73 20 22 ts "\t}"..puts "
2db0: 22 0a 09 70 75 74 73 20 22 5c 74 66 72 65 65 5f "..puts "\tfree_
2dc0: 6f 6c 64 5f 64 61 74 61 20 3d 20 66 69 6e 66 6f old_data = finfo
2dd0: 2d 3e 66 72 65 65 3b 22 0a 09 70 75 74 73 20 22 ->free;"..puts "
2de0: 5c 74 6f 6c 64 5f 64 61 74 61 20 3d 20 28 76 6f \told_data = (vo
2df0: 69 64 20 2a 29 20 66 69 6e 66 6f 2d 3e 64 61 74 id *) finfo->dat
2e00: 61 3b 22 0a 09 70 75 74 73 20 22 22 0a 09 70 75 a;"..puts ""..pu
2e10: 74 73 20 22 5c 74 66 69 6e 66 6f 2d 3e 64 61 74 ts "\tfinfo->dat
2e20: 61 20 3d 20 6e 65 77 5f 64 61 74 61 3b 22 0a 09 a = new_data;"..
2e30: 70 75 74 73 20 22 5c 74 66 69 6e 66 6f 2d 3e 66 puts "\tfinfo->f
2e40: 72 65 65 20 3d 20 31 3b 22 0a 09 70 75 74 73 20 ree = 1;"..puts
2e50: 22 5c 74 66 69 6e 66 6f 2d 3e 74 79 70 65 20 3d "\tfinfo->type =
2e60: 20 43 56 46 53 5f 46 49 4c 45 54 59 50 45 5f 46 CVFS_FILETYPE_F
2e70: 49 4c 45 3b 22 0a 09 70 75 74 73 20 22 22 0a 09 ILE;"..puts ""..
2e80: 70 75 74 73 20 22 5c 74 69 66 20 28 66 72 65 65 puts "\tif (free
2e90: 5f 6f 6c 64 5f 64 61 74 61 29 20 7b 22 0a 09 70 _old_data) {"..p
2ea0: 75 74 73 20 22 5c 74 5c 74 54 63 6c 5f 46 72 65 uts "\t\tTcl_Fre
2eb0: 65 28 28 76 6f 69 64 20 2a 29 20 6f 6c 64 5f 64 e((void *) old_d
2ec0: 61 74 61 29 3b 22 0a 09 70 75 74 73 20 22 5c 74 ata);"..puts "\t
2ed0: 7d 22 0a 09 70 75 74 73 20 22 5c 74 72 65 74 75 }"..puts "\tretu
2ee0: 72 6e 3b 22 0a 09 70 75 74 73 20 22 7d 22 0a 09 rn;"..puts "}"..
2ef0: 70 75 74 73 20 22 22 0a 7d 0a 0a 70 75 74 73 20 puts "".}..puts
2f00: 22 23 20 20 69 66 64 65 66 20 43 56 46 53 5f 4d "# ifdef CVFS_M
2f10: 41 4b 45 5f 4c 4f 41 44 41 42 4c 45 22 0a 0a 73 AKE_LOADABLE"..s
2f20: 65 74 20 66 64 20 5b 6f 70 65 6e 20 22 63 76 66 et fd [open "cvf
2f30: 73 5f 64 61 74 61 2e 63 22 5d 0a 70 75 74 73 20 s_data.c"].puts
2f40: 5b 72 65 61 64 20 24 66 64 5d 0a 63 6c 6f 73 65 [read $fd].close
2f50: 20 24 66 64 0a 0a 70 75 74 73 20 22 73 74 61 74 $fd..puts "stat
2f60: 69 63 20 63 6d 64 5f 67 65 74 44 61 74 61 5f 74 ic cmd_getData_t
2f70: 20 2a 67 65 74 43 6d 64 44 61 74 61 28 63 6f 6e *getCmdData(con
2f80: 73 74 20 63 68 61 72 20 2a 68 61 73 68 6b 65 79 st char *hashkey
2f90: 29 20 7b 22 0a 70 75 74 73 20 22 5c 74 72 65 74 ) {".puts "\tret
2fa0: 75 72 6e 28 24 7b 63 6f 64 65 5f 74 61 67 7d 5f urn(${code_tag}_
2fb0: 67 65 74 44 61 74 61 29 3b 22 0a 70 75 74 73 20 getData);".puts
2fc0: 22 7d 22 0a 70 75 74 73 20 22 22 0a 70 75 74 73 "}".puts "".puts
2fd0: 20 22 73 74 61 74 69 63 20 63 6d 64 5f 67 65 74 "static cmd_get
2fe0: 43 68 69 6c 64 72 65 6e 5f 74 20 2a 67 65 74 43 Children_t *getC
2ff0: 6d 64 43 68 69 6c 64 72 65 6e 28 63 6f 6e 73 74 mdChildren(const
3000: 20 63 68 61 72 20 2a 68 61 73 68 6b 65 79 29 20 char *hashkey)
3010: 7b 22 0a 70 75 74 73 20 22 5c 74 72 65 74 75 72 {".puts "\tretur
3020: 6e 28 24 7b 63 6f 64 65 5f 74 61 67 7d 5f 67 65 n(${code_tag}_ge
3030: 74 43 68 69 6c 64 72 65 6e 29 3b 22 0a 70 75 74 tChildren);".put
3040: 73 20 22 7d 22 0a 70 75 74 73 20 22 22 0a 70 75 s "}".puts "".pu
3050: 74 73 20 22 73 74 61 74 69 63 20 63 6d 64 5f 64 ts "static cmd_d
3060: 65 63 72 79 70 74 46 69 6c 65 5f 74 20 2a 67 65 ecryptFile_t *ge
3070: 74 43 6d 64 44 65 63 72 79 70 74 46 69 6c 65 28 tCmdDecryptFile(
3080: 63 6f 6e 73 74 20 63 68 61 72 20 2a 68 61 73 68 const char *hash
3090: 6b 65 79 29 20 7b 22 0a 69 66 20 7b 24 6f 62 73 key) {".if {$obs
30a0: 66 75 63 61 74 65 7d 20 7b 0a 09 70 75 74 73 20 fucate} {..puts
30b0: 22 5c 74 72 65 74 75 72 6e 28 24 7b 63 6f 64 65 "\treturn(${code
30c0: 5f 74 61 67 7d 5f 64 65 63 72 79 70 74 46 69 6c _tag}_decryptFil
30d0: 65 29 3b 22 0a 7d 20 65 6c 73 65 20 7b 0a 09 70 e);".} else {..p
30e0: 75 74 73 20 22 5c 74 72 65 74 75 72 6e 28 4e 55 uts "\treturn(NU
30f0: 4c 4c 29 3b 22 0a 7d 0a 70 75 74 73 20 22 7d 22 LL);".}.puts "}"
3100: 0a 70 75 74 73 20 22 22 0a 0a 70 75 74 73 20 22 .puts ""..puts "
3110: 69 6e 74 20 43 76 66 73 5f 64 61 74 61 5f 24 7b int Cvfs_data_${
3120: 68 61 73 68 6b 65 79 7d 5f 49 6e 69 74 28 54 63 hashkey}_Init(Tc
3130: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
3140: 29 20 7b 22 0a 70 75 74 73 20 22 5c 74 54 63 6c ) {".puts "\tTcl
3150: 5f 43 6f 6d 6d 61 6e 64 20 74 63 6c 43 72 65 61 _Command tclCrea
3160: 74 43 6f 6d 6d 5f 72 65 74 3b 22 0a 70 75 74 73 tComm_ret;".puts
3170: 20 22 5c 74 69 6e 74 20 74 63 6c 50 6b 67 50 72 "\tint tclPkgPr
3180: 6f 76 5f 72 65 74 3b 22 0a 70 75 74 73 20 22 22 ov_ret;".puts ""
3190: 0a 70 75 74 73 20 22 23 69 66 64 65 66 20 55 53 .puts "#ifdef US
31a0: 45 5f 54 43 4c 5f 53 54 55 42 53 22 0a 70 75 74 E_TCL_STUBS".put
31b0: 73 20 22 5c 74 69 66 20 28 21 54 63 6c 5f 49 6e s "\tif (!Tcl_In
31c0: 69 74 53 74 75 62 73 28 69 6e 74 65 72 70 2c 20 itStubs(interp,
31d0: 54 43 4c 5f 56 45 52 53 49 4f 4e 2c 20 30 29 29 TCL_VERSION, 0))
31e0: 20 7b 22 0a 70 75 74 73 20 22 23 65 6c 73 65 22 {".puts "#else"
31f0: 0a 70 75 74 73 20 22 5c 74 69 66 20 28 21 54 63 .puts "\tif (!Tc
3200: 6c 5f 50 6b 67 52 65 71 75 69 72 65 28 69 6e 74 l_PkgRequire(int
3210: 65 72 70 2c 20 5c 22 54 63 6c 5c 22 2c 20 54 43 erp, \"Tcl\", TC
3220: 4c 5f 56 45 52 53 49 4f 4e 2c 20 30 29 29 20 7b L_VERSION, 0)) {
3230: 22 0a 70 75 74 73 20 22 23 65 6e 64 69 66 20 2f ".puts "#endif /
3240: 2a 20 55 53 45 5f 54 43 4c 5f 53 54 55 42 53 20 * USE_TCL_STUBS
3250: 2a 2f 22 0a 70 75 74 73 20 22 5c 74 5c 74 72 65 */".puts "\t\tre
3260: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b turn(TCL_ERROR);
3270: 22 0a 70 75 74 73 20 22 5c 74 7d 22 0a 70 75 74 ".puts "\t}".put
3280: 73 20 22 22 0a 70 75 74 73 20 22 5c 74 74 63 6c s "".puts "\ttcl
3290: 43 72 65 61 74 43 6f 6d 6d 5f 72 65 74 20 3d 20 CreatComm_ret =
32a0: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d Tcl_CreateObjCom
32b0: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 5c 22 3a mand(interp, \":
32c0: 3a 76 66 73 3a 3a 63 76 66 73 3a 3a 64 61 74 61 :vfs::cvfs::data
32d0: 3a 3a 24 7b 68 61 73 68 6b 65 79 7d 3a 3a 67 65 ::${hashkey}::ge
32e0: 74 4d 65 74 61 64 61 74 61 5c 22 2c 20 67 65 74 tMetadata\", get
32f0: 4d 65 74 61 64 61 74 61 2c 20 4e 55 4c 4c 2c 20 Metadata, NULL,
3300: 4e 55 4c 4c 29 3b 22 0a 70 75 74 73 20 22 5c 74 NULL);".puts "\t
3310: 69 66 20 28 21 74 63 6c 43 72 65 61 74 43 6f 6d if (!tclCreatCom
3320: 6d 5f 72 65 74 29 20 7b 22 0a 70 75 74 73 20 22 m_ret) {".puts "
3330: 5c 74 5c 74 72 65 74 75 72 6e 28 54 43 4c 5f 45 \t\treturn(TCL_E
3340: 52 52 4f 52 29 3b 22 0a 70 75 74 73 20 22 5c 74 RROR);".puts "\t
3350: 7d 22 0a 70 75 74 73 20 22 22 0a 70 75 74 73 20 }".puts "".puts
3360: 22 5c 74 74 63 6c 43 72 65 61 74 43 6f 6d 6d 5f "\ttclCreatComm_
3370: 72 65 74 20 3d 20 54 63 6c 5f 43 72 65 61 74 65 ret = Tcl_Create
3380: 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 ObjCommand(inter
3390: 70 2c 20 5c 22 3a 3a 76 66 73 3a 3a 63 76 66 73 p, \"::vfs::cvfs
33a0: 3a 3a 64 61 74 61 3a 3a 24 7b 68 61 73 68 6b 65 ::data::${hashke
33b0: 79 7d 3a 3a 67 65 74 44 61 74 61 5c 22 2c 20 67 y}::getData\", g
33c0: 65 74 44 61 74 61 2c 20 4e 55 4c 4c 2c 20 4e 55 etData, NULL, NU
33d0: 4c 4c 29 3b 22 0a 70 75 74 73 20 22 5c 74 69 66 LL);".puts "\tif
33e0: 20 28 21 74 63 6c 43 72 65 61 74 43 6f 6d 6d 5f (!tclCreatComm_
33f0: 72 65 74 29 20 7b 22 0a 70 75 74 73 20 22 5c 74 ret) {".puts "\t
3400: 5c 74 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 \treturn(TCL_ERR
3410: 4f 52 29 3b 22 0a 70 75 74 73 20 22 5c 74 7d 22 OR);".puts "\t}"
3420: 0a 70 75 74 73 20 22 22 0a 70 75 74 73 20 22 5c .puts "".puts "\
3430: 74 74 63 6c 43 72 65 61 74 43 6f 6d 6d 5f 72 65 ttclCreatComm_re
3440: 74 20 3d 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 t = Tcl_CreateOb
3450: 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c jCommand(interp,
3460: 20 5c 22 3a 3a 76 66 73 3a 3a 63 76 66 73 3a 3a \"::vfs::cvfs::
3470: 64 61 74 61 3a 3a 24 7b 68 61 73 68 6b 65 79 7d data::${hashkey}
3480: 3a 3a 67 65 74 43 68 69 6c 64 72 65 6e 5c 22 2c ::getChildren\",
3490: 20 67 65 74 43 68 69 6c 64 72 65 6e 2c 20 4e 55 getChildren, NU
34a0: 4c 4c 2c 20 4e 55 4c 4c 29 3b 22 0a 70 75 74 73 LL, NULL);".puts
34b0: 20 22 5c 74 69 66 20 28 21 74 63 6c 43 72 65 61 "\tif (!tclCrea
34c0: 74 43 6f 6d 6d 5f 72 65 74 29 20 7b 22 0a 70 75 tComm_ret) {".pu
34d0: 74 73 20 22 5c 74 5c 74 72 65 74 75 72 6e 28 54 ts "\t\treturn(T
34e0: 43 4c 5f 45 52 52 4f 52 29 3b 22 0a 70 75 74 73 CL_ERROR);".puts
34f0: 20 22 5c 74 7d 22 0a 70 75 74 73 20 22 22 0a 70 "\t}".puts "".p
3500: 75 74 73 20 22 5c 74 74 63 6c 50 6b 67 50 72 6f uts "\ttclPkgPro
3510: 76 5f 72 65 74 20 3d 20 54 63 6c 5f 50 6b 67 50 v_ret = Tcl_PkgP
3520: 72 6f 76 69 64 65 28 69 6e 74 65 72 70 2c 20 5c rovide(interp, \
3530: 22 76 66 73 3a 3a 63 76 66 73 3a 3a 64 61 74 61 "vfs::cvfs::data
3540: 3a 3a 24 7b 68 61 73 68 6b 65 79 7d 5c 22 2c 20 ::${hashkey}\",
3550: 5c 22 31 2e 30 5c 22 29 3b 22 0a 70 75 74 73 20 \"1.0\");".puts
3560: 22 22 0a 70 75 74 73 20 22 5c 74 72 65 74 75 72 "".puts "\tretur
3570: 6e 28 74 63 6c 50 6b 67 50 72 6f 76 5f 72 65 74 n(tclPkgProv_ret
3580: 29 3b 22 0a 70 75 74 73 20 22 5c 74 7d 22 0a 70 );".puts "\t}".p
3590: 75 74 73 20 22 23 20 20 65 6e 64 69 66 20 2f 2a uts "# endif /*
35a0: 20 43 56 46 53 5f 4d 41 4b 45 5f 4c 4f 41 44 41 CVFS_MAKE_LOADA
35b0: 42 4c 45 20 2a 2f 22 0a 0a 70 75 74 73 20 22 23 BLE */"..puts "#
35c0: 65 6e 64 69 66 20 2f 2a 20 21 24 63 70 70 5f 74 endif /* !$cpp_t
35d0: 61 67 20 2a 2f 22 0a ag */".