Subversion Repositories HelenOS

Rev

Rev 3019 | Rev 3028 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3019 Rev 3021
Line 32... Line 32...
32
 
32
 
33
import sys
33
import sys
34
import os
34
import os
35
import struct
35
import struct
36
 
36
 
-
 
37
def align_up(size, alignment):
-
 
38
    return (((size) + ((alignment) - 1)) & ~((alignment) - 1))
-
 
39
 
37
def usage(prname):
40
def usage(prname):
38
    "Print usage syntax"
41
    "Print usage syntax"
39
    print prname + " <PATH> <IMAGE>"
42
    print prname + " <ALIGNMENT> <PATH> <IMAGE>"
40
 
43
 
41
def main():
44
def main():
42
    if (len(sys.argv) < 3):
45
    if (len(sys.argv) < 4):
43
        usage(sys.argv[0])
46
        usage(sys.argv[0])
44
        return
47
        return
45
   
48
   
-
 
49
    if (not sys.argv[1].isdigit()):
-
 
50
        print "<ALIGNMENT> must be a number"
-
 
51
        return
-
 
52
   
-
 
53
    align = int(sys.argv[1], 0)
46
    path = os.path.abspath(sys.argv[1]);
54
    path = os.path.abspath(sys.argv[2])
47
    if (not os.path.isdir(path)):
55
    if (not os.path.isdir(path)):
48
        print "<PATH> must be a directory"
56
        print "<PATH> must be a directory"
49
        return
57
        return
50
   
58
   
51
    header_size = 18
59
    header_size = align_up(18, align)
52
    payload_size = 0
60
    payload_size = 0
53
    outf = file(sys.argv[2], "w")
61
    outf = file(sys.argv[3], "w")
54
    outf.write(struct.pack("<" + ("%d" % header_size) + "x"))
62
    outf.write(struct.pack("<" + ("%d" % header_size) + "x"))
55
   
63
   
56
    for root, dirs, files in os.walk(path):
64
    for root, dirs, files in os.walk(path):
57
        relpath = root[len(path):len(root)]
65
        relpath = root[len(path):len(root)]
58
        for name in files:
66
        for name in files:
Line 77... Line 85...
77
        for name in dirs:
85
        for name in dirs:
78
            canon = os.path.join(relpath, name)
86
            canon = os.path.join(relpath, name)
79
            outf.write(struct.pack("<BL" + ("%d" % len(canon)) + "s", 2, len(canon), canon))
87
            outf.write(struct.pack("<BL" + ("%d" % len(canon)) + "s", 2, len(canon), canon))
80
            payload_size += 5 + len(canon)
88
            payload_size += 5 + len(canon)
81
   
89
   
-
 
90
    aligned_size = align_up(payload_size, align)
-
 
91
   
-
 
92
    if (aligned_size - payload_size > 0):
-
 
93
        outf.write(struct.pack("<" + ("%d" % (aligned_size - payload_size)) + "x"))
-
 
94
   
82
    outf.seek(0)
95
    outf.seek(0)
83
    outf.write(struct.pack("<4sBBLQ", "HORD", 1, 1, header_size, payload_size))
96
    outf.write(struct.pack("<4sBBLQ", "HORD", 1, 1, header_size, aligned_size))
84
    outf.close()
97
    outf.close()
85
 
98
 
86
if __name__ == '__main__':
99
if __name__ == '__main__':
87
    main()
100
    main()