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
|
file_read(buffer, size, user_data)
file = user_data
return fread(buffer, 1, size, file)
extract(file_name, outer_member, inner_action)
file = fopen(file_name, "rb")
outer_gzip = gzip_init(&file_read, file)
outer_ustar = ustar_init(outer_gzip)
ustar_seek(outer_ustar, outer_member)
inner_gzip = gzip_init(ustar_next_data_record, outer_ustar)
inner_ustar = ustar_init(inner_gzip)
inner_action(inner_ustar)
print_data(data, size)
fwrite(data, 1, size, stdout)
read_control(inner_ustar)
ustar_seek(inner_ustar, "control")
ustar_read(inner_ustar, &print_data)
print_member(member)
printf("%s", member->name)
list_members(inner_ustar)
ustar_list(inner_ustar, &print_member)
main()
if -I
extract(argv[1], "control.tar.gz", &read_control)
else if -c
extract(argv[1], "data.tar.gz", &list_members)
|