Andrei Borzenkov
951306c509
squash4: fix handling of fragments and sparse files
...
1. Do not assume block list and fragment are mutually exclusive. Squash
can pack file tail as fragment (unless -no-fragments is specified); so
check read offset and read either from block list or from fragments as
appropriate.
2. Support sparse files with zero blocks.
3. Fix fragment read - frag.offset is absolute fragment position,
not offset relative to ino.chunk.
Reported and tested by Carlo Caione <carlo@endlessm.com>
2017-02-24 19:10:43 +03:00
Vladimir Serbinenko
7e47e27bd8
Add gcc_struct to all packed structures when compiling with mingw.
...
Just "packed" doesn't always pack the way we expect.
2013-12-15 14:14:30 +01:00
Colin Watson
fc524edf65
Remove nested functions from filesystem directory iterators.
...
* include/grub/fs.h (grub_fs_dir_hook_t): New type.
(struct grub_fs.dir): Add hook_data argument.
Update all implementations and callers.
2013-01-21 01:33:46 +00:00
Vladimir 'phcoder' Serbinenko
20dd511c8c
Handle "." and ".." on squashfs.
...
* grub-core/fs/squash4.c (grub_fshelp_node): New field stsize.
Make inode numbers into stack.
(grub_squash_read_symlink): Use stack.
(grub_squash_iterate_dir): Use stack. Create "." and ".." nodes.
(make_root_node): Fill stack.
(grub_squash_open): Use stack.
2012-05-27 13:44:48 +02:00
Vladimir 'phcoder' Serbinenko
4cf6be1bd9
* grub-core/fs/squash4.c (grub_squash_read_data): Add missing byte-swap.
2012-05-22 08:38:17 +02:00
Vladimir 'phcoder' Serbinenko
6f5d5ee865
* grub-core/fs/squash4.c (grub_squash_inode): Fix offset field.
...
(grub_squash_read_data): Fix offset byte-swapping.
2012-05-04 17:13:24 +02:00
Vladimir 'phcoder' Serbinenko
b282dfe5ac
* grub-core/fs/squash4.c (lzo_decompress): Set grub_errno on error.
...
Allocate at lest 8192 for temporary buffer as required for lzo.
2012-04-26 01:16:25 +02:00
Vladimir 'phcoder' Serbinenko
e1e49678b9
* util/grub-install.in: Clarify strings.
...
Fix source dir check.
2012-02-27 21:36:58 +01:00
Vladimir 'phcoder' Serbinenko
22965bce9b
* grub-core/fs/squash4.c (direct_read): Rename read to curread to
...
avoid shadowing.
2012-02-10 12:17:40 +01:00
Vladimir 'phcoder' Serbinenko
f6e4ea709f
* grub-core/fs/squash4.c (xz_decompress): Fix return value.
...
(direct_read): Use correct compressed size.
(grub_squash_read_data): Likewise.
2012-01-27 13:09:57 +01:00
Vladimir 'phcoder' Serbinenko
ff094b9b57
* grub-core/fs/squash4.c (squash_mount): Mark endian conversion in
...
case statements as compile-time one.
(direct_read): Prevent spurious warnings.
(grub_squash_read_data): Likewise.
2012-01-11 12:46:50 +01:00
Vladimir 'phcoder' Serbinenko
c029da8a89
Various squash4 fixes and LZO and XZ support.
...
* Makefile.util.def (libgrubmods.a): Add xzembed directory to cppflags.
Add xzembed source files.
* grub-core/Makefile.core.def (squash4): Add xzembed and minilzo flags.
* grub-core/fs/squash4.c (grub_squash_super): New field compression.
(grub_squash_inode): New subtype long_dir.
(SQUASH_TYPE_LONG_DIR): New inode type.
(COMPRESSION): New enum.
(XZBUFSIZ): New const.
(grub_squash_data): New fields blksz, decompress, xzdec, xzbuf.
(read_chunk): Use data->decompress.
(zlib_decompress): New function.
(lzo_decompress): Likewise.
(xz_decompress): Likewise.
(squash_mount): Set new data fields.
(grub_squash_iterate_dir): Handle long dir.
(squash_unmount): Free xzdec and xzbuf.
(grub_squash_open): Check ino type.
(direct_read): Stylistic fixes. Use data->decompress.
(grub_squash_read_data): Likewise.
* grub-core/io/gzio.c (grub_gzio): Remove disk_input.
(get_byte): Likewise.
(grub_zlib_disk_read): Removed.
* grub-core/lib/posix_wrap/sys/types.h (ssize_t): New type.
(GRUB_POSIX_BOOL_DEFINED): New define.
* grub-core/lib/posix_wrap/unistd.h: Include sys/types.h.
* grub-core/lib/xzembed/xz.h: Addmissing includes.
[!GRUB_POSIX_BOOL_DEFINED]: Define bool.
* include/grub/deflate.h (grub_zlib_disk_read): Removed.
2011-12-26 13:18:01 +01:00
Vladimir 'phcoder' Serbinenko
efc2616ee1
* grub-core/fs/squash4.c (grub_squash_inode): Fix field sizes.
...
(grub_squash_dirent_header): Likewise.
(read_chunk): Don't double swap.
(grub_squash_iterate_dir): Fix swap sizes.
2011-12-13 23:14:25 +01:00
Vladimir 'phcoder' Serbinenko
8a5a3a5b5a
Fix several memory leaks.
...
* grub-core/fs/btrfs.c (grub_btrfs_dir): Fix memory leak.
* grub-core/fs/cpio.c (grub_cpio_find_file): Likewise.
(grub_cpio_dir): Likewise.
* grub-core/fs/fat.c (grub_fat_label): Likewise.
* grub-core/fs/jfs.c (grub_jfs_label): Likewise.
* grub-core/fs/romfs.c (grub_romfs_close): Likewise.
(grub_romfs_label): Likewise.
* grub-core/fs/squash4.c (squash_mount): Use zalloc for safety.
(squash_unmount): New function.
(grub_squash_dir): Fix memory leak.
(grub_squash_open): Likewise.
(grub_squash_read): Likewise.
(grub_squash_mtime): Likewise.
* grub-core/fs/xfs.c (grub_xfs_open): Likewise.
* grub-core/fs/zfs/zfs.c (check_pool_label): Likewise.
* util/grub-fstest.c (fstest): Likewise.
2011-11-09 15:01:58 +01:00
Vladimir 'phcoder' Serbinenko
ed9ba06dd0
Use shifts in squash4.
...
* grub-core/fs/squash4.c (grub_squash_data): New field log2_blksz.
(squash_mount): Check block size and take logarithm.
(direct_read): Use shifts.
2011-10-28 16:05:16 +02:00
Vladimir 'phcoder' Serbinenko
9f12e664cc
Fix handling of uncompressed blocks on squashfs and break 4G limit.
...
* grub-core/fs/squash4.c (grub_squash_super): Add block_size. Remove
unused flags.
(grub_squash_inode): Add long_file and block_size.
(grub_squash_cache_inode): New struct.
(grub_squash_dirent): Make types into enum.
(SQUASH_TYPE_LONG_REGULAR): New type.
(grub_squash_frag_desc): Add field size.
(SQUASH_BLOCK_FLAGS): New enum.
(grub_squash_data): Use grub_squash_cache_inode.
(grub_fshelp_node): Make ino_chunk 64-bit.
(read_chunk): Minor argument change. All users updated.
(squash_mount): Use correct le_to_cpu.
(grub_squash_open): Handle LONG_REGULAR.
(direct_read): New function.
(grub_squash_read_data): Handle blocks correctly.
2011-10-25 18:09:00 +02:00
Colin Watson
cff5e5e58d
grub-core/fs/squash4.c: Add missing GRUB_MOD_LICENSE.
2011-04-21 10:37:45 +01:00
Vladimir 'phcoder' Serbinenko
81ecffbfc1
Add missing packed attribute
2010-12-11 18:42:44 +01:00
Vladimir 'phcoder' Serbinenko
5e96cb4452
Extend few other fields
2010-12-11 18:41:42 +01:00
Vladimir 'phcoder' Serbinenko
ea17ec49ae
Extend fields in dirent header
2010-12-11 18:32:08 +01:00
Vladimir 'phcoder' Serbinenko
4aab263130
SquashFS mtime support
2010-12-11 18:20:45 +01:00
Vladimir 'phcoder' Serbinenko
4a91cd8220
symlink support
2010-12-09 22:29:36 +01:00
Vladimir 'phcoder' Serbinenko
e330e4f383
support file mtime
2010-12-09 21:17:27 +01:00
Vladimir 'phcoder' Serbinenko
627a62fc70
Make type-dependent portion of inode an union
2010-12-09 21:14:42 +01:00
Vladimir 'phcoder' Serbinenko
1fc7203971
Split grub_squash_read_data
2010-12-09 20:48:03 +01:00
Vladimir 'phcoder' Serbinenko
8eef1f8244
Compressed fragments and compressed data support
2010-12-09 20:41:41 +01:00
Vladimir 'phcoder' Serbinenko
e4eaf62555
Small restructuring of squash_read
2010-12-09 19:40:11 +01:00
Vladimir 'phcoder' Serbinenko
76e39dc871
Compressed metadata support
2010-12-09 19:23:35 +01:00
Vladimir 'phcoder' Serbinenko
99f0735fb8
Support multi-header directories
2010-12-09 18:22:38 +01:00
Vladimir 'phcoder' Serbinenko
948ebd7e91
Support fragments and chunks for data
2010-12-09 17:06:49 +01:00
Vladimir 'phcoder' Serbinenko
7ed6c3e85f
Honor chunk number for directories
2010-12-09 02:48:59 +01:00
Vladimir 'phcoder' Serbinenko
0a040470e5
determine root inode on squash4fs
2010-12-09 00:04:36 +01:00
Vladimir 'phcoder' Serbinenko
1deadc83f5
extend size to 32-bit and handle file->offset
2010-12-08 23:03:59 +01:00
Vladimir 'phcoder' Serbinenko
332fa36887
some squash4 code. Works only in very easy cases.
2010-12-08 21:22:46 +01:00