Subversion Repositories HelenOS

Rev

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

Rev 3535 Rev 3561
Line 34... Line 34...
34
import os
34
import os
35
import random
35
import random
36
import xstruct
36
import xstruct
37
import array
37
import array
38
 
38
 
-
 
39
exclude_names = set(['.svn'])
-
 
40
 
39
def align_up(size, alignment):
41
def align_up(size, alignment):
40
    "Return size aligned up to alignment"
42
    "Return size aligned up to alignment"
41
   
43
   
42
    if (size % alignment == 0):
44
    if (size % alignment == 0):
43
        return size
45
        return size
Line 51... Line 53...
51
    files = 2
53
    files = 2
52
   
54
   
53
    for name in os.listdir(root):
55
    for name in os.listdir(root):
54
        canon = os.path.join(root, name)
56
        canon = os.path.join(root, name)
55
       
57
       
56
        if (os.path.isfile(canon)):
58
        if (os.path.isfile(canon) and (not name in exclude_names)):
57
            size += align_up(os.path.getsize(canon), cluster_size)
59
            size += align_up(os.path.getsize(canon), cluster_size)
58
            files += 1
60
            files += 1
59
       
61
       
60
        if (os.path.isdir(canon)):
62
        if (os.path.isdir(canon) and (not name in exclude_names)):
61
            size += subtree_size(canon, cluster_size, dirent_size)
63
            size += subtree_size(canon, cluster_size, dirent_size)
62
            files += 1
64
            files += 1
63
   
65
   
64
    return size + align_up(files * dirent_size, cluster_size)
66
    return size + align_up(files * dirent_size, cluster_size)
65
 
67
 
Line 284... Line 286...
284
        empty_cluster = 0
286
        empty_cluster = 0
285
   
287
   
286
    for name in os.listdir(root):
288
    for name in os.listdir(root):
287
        canon = os.path.join(root, name)
289
        canon = os.path.join(root, name)
288
       
290
       
289
        if (os.path.isfile(canon)):
291
        if (os.path.isfile(canon) and (not name in exclude_names)):
290
            rv = write_file(canon, outf, cluster_size, data_start, fat, reserved_clusters)
292
            rv = write_file(canon, outf, cluster_size, data_start, fat, reserved_clusters)
291
            directory.append(create_dirent(name, False, rv[0], rv[1]))
293
            directory.append(create_dirent(name, False, rv[0], rv[1]))
292
       
294
       
293
        if (os.path.isdir(canon)):
295
        if (os.path.isdir(canon) and (not name in exclude_names)):
294
            rv = recursion(False, canon, outf, cluster_size, root_start, data_start, fat, reserved_clusters, dirent_size, empty_cluster)
296
            rv = recursion(False, canon, outf, cluster_size, root_start, data_start, fat, reserved_clusters, dirent_size, empty_cluster)
295
            directory.append(create_dirent(name, True, rv[0], rv[1]))
297
            directory.append(create_dirent(name, True, rv[0], rv[1]))
296
   
298
   
297
    if (head):
299
    if (head):
298
        outf.seek(root_start)
300
        outf.seek(root_start)
Line 349... Line 351...
349
    if (not os.path.isdir(path)):
351
    if (not os.path.isdir(path)):
350
        print "<PATH> must be a directory"
352
        print "<PATH> must be a directory"
351
        return
353
        return
352
   
354
   
353
    fat16_clusters = 4096
355
    fat16_clusters = 4096
354
    min_cluster_size = 1024
-
 
355
   
356
   
356
    sector_size = 512
357
    sector_size = 512
357
    cluster_size = 4096
358
    cluster_size = 4096
358
    dirent_size = 32
359
    dirent_size = 32
359
    fatent_size = 2
360
    fatent_size = 2
Line 361... Line 362...
361
    reserved_clusters = 2
362
    reserved_clusters = 2
362
   
363
   
363
    # Make sure the filesystem is large enought for FAT16
364
    # Make sure the filesystem is large enought for FAT16
364
    size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size
365
    size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size
365
    while (size / cluster_size < fat16_clusters):
366
    while (size / cluster_size < fat16_clusters):
366
        if (cluster_size > min_cluster_size):
367
        if (cluster_size > sector_size):
367
            cluster_size /= 2
368
            cluster_size /= 2
368
            size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size
369
            size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size
369
        else:
370
        else:
370
            size = fat16_clusters * cluster_size + reserved_clusters * cluster_size
371
            size = fat16_clusters * cluster_size + reserved_clusters * cluster_size
371
   
372