2007-12-21 Bean <bean123ch@gmail.com>
* conf/common.rmk (pkgdata_MODULES): Add ntfscomp.mod. (ntfscomp_mod_SOURCES): New variable. (ntfscomp_mod_CFLAGS): Likewise. (ntfscomp_mod_LDFLAGS): Likewise. * conf/i386-pc.rmk (grub_setup_SOURCES): Add fs/ntfscomp.c. (grub_probe_SOURCES): Likewise. (grub_emu_SOURCES): Likewise. * conf/i386-efi.rmk (grub_probe_SOURCES): Add fs/ntfscomp.c. (grub_emu_SOURCES): Likewise. * conf/i386-linuxbios.rmk (grub_probe_SOURCES): Add fs/ntfscomp.c. (grub_emu_SOURCES): Likewise. * conf/powerpc-ieee1275.rmk (grub_probe_SOURCES): Add fs/ntfscomp.c. (grub_emu_SOURCES): Likewise. * fs/ntfs.c (grub_ntfscomp_func): New variable. (read_run_list): Renamed to grub_ntfs_read_run_list. (decomp_nextvcn): Moved to ntfscomp.c. (decomp_getch): Likewise. (decomp_get16): Likewise. (decomp_block): Likewise. (read_block): Likewise. (read_data): Partially moved to ntfscomp.c. (fixup): Change unsigned to grub_uint16_t. (read_mft): Change unsigned long to grub_uint32_t. (read_attr): Likewise. (read_data): Likewise. (read_run_data): Likewise. (read_run_list): Likewise. (read_mft): Likewise. * fs/ntfscomp.c: New file. * include/grub/ntfs.h: New file.
This commit is contained in:
		
							parent
							
								
									af680a8784
								
							
						
					
					
						commit
						4bc72aa96f
					
				
					 14 changed files with 821 additions and 601 deletions
				
			
		
							
								
								
									
										184
									
								
								include/grub/ntfs.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								include/grub/ntfs.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,184 @@ | |||
| /* ntfs.h - header for the NTFS filesystem */ | ||||
| /*
 | ||||
|  *  GRUB  --  GRand Unified Bootloader | ||||
|  *  Copyright (C) 2007  Free Software Foundation, Inc. | ||||
|  * | ||||
|  *  GRUB is free software: you can redistribute it and/or modify | ||||
|  *  it under the terms of the GNU General Public License as published by | ||||
|  *  the Free Software Foundation, either version 3 of the License, or | ||||
|  *  (at your option) any later version. | ||||
|  * | ||||
|  *  GRUB is distributed in the hope that it will be useful, | ||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  *  GNU General Public License for more details. | ||||
|  * | ||||
|  *  You should have received a copy of the GNU General Public License | ||||
|  *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  */ | ||||
| 
 | ||||
| #ifndef GRUB_NTFS_H | ||||
| #define GRUB_NTFS_H	1 | ||||
| 
 | ||||
| #define FILE_MFT      0 | ||||
| #define FILE_MFTMIRR  1 | ||||
| #define FILE_LOGFILE  2 | ||||
| #define FILE_VOLUME   3 | ||||
| #define FILE_ATTRDEF  4 | ||||
| #define FILE_ROOT     5 | ||||
| #define FILE_BITMAP   6 | ||||
| #define FILE_BOOT     7 | ||||
| #define FILE_BADCLUS  8 | ||||
| #define FILE_QUOTA    9 | ||||
| #define FILE_UPCASE  10 | ||||
| 
 | ||||
| #define AT_STANDARD_INFORMATION	0x10 | ||||
| #define AT_ATTRIBUTE_LIST	0x20 | ||||
| #define AT_FILENAME		0x30 | ||||
| #define AT_OBJECT_ID		0x40 | ||||
| #define AT_SECURITY_DESCRIPTOR	0x50 | ||||
| #define AT_VOLUME_NAME		0x60 | ||||
| #define AT_VOLUME_INFORMATION	0x70 | ||||
| #define AT_DATA			0x80 | ||||
| #define AT_INDEX_ROOT		0x90 | ||||
| #define AT_INDEX_ALLOCATION	0xA0 | ||||
| #define AT_BITMAP		0xB0 | ||||
| #define AT_SYMLINK		0xC0 | ||||
| #define AT_EA_INFORMATION	0xD0 | ||||
| #define AT_EA			0xE0 | ||||
| 
 | ||||
| #define ATTR_READ_ONLY		0x1 | ||||
| #define ATTR_HIDDEN		0x2 | ||||
| #define ATTR_SYSTEM		0x4 | ||||
| #define ATTR_ARCHIVE		0x20 | ||||
| #define ATTR_DEVICE		0x40 | ||||
| #define ATTR_NORMAL		0x80 | ||||
| #define ATTR_TEMPORARY		0x100 | ||||
| #define ATTR_SPARSE		0x200 | ||||
| #define ATTR_REPARSE		0x400 | ||||
| #define ATTR_COMPRESSED		0x800 | ||||
| #define ATTR_OFFLINE		0x1000 | ||||
| #define ATTR_NOT_INDEXED	0x2000 | ||||
| #define ATTR_ENCRYPTED		0x4000 | ||||
| #define ATTR_DIRECTORY		0x10000000 | ||||
| #define ATTR_INDEX_VIEW		0x20000000 | ||||
| 
 | ||||
| #define FLAG_COMPRESSED		1 | ||||
| #define FLAG_ENCRYPTED		0x4000 | ||||
| #define FLAG_SPARSE		0x8000 | ||||
| 
 | ||||
| #define BLK_SHR		GRUB_DISK_SECTOR_BITS | ||||
| 
 | ||||
| #define MAX_MFT		(1024 >> BLK_SHR) | ||||
| #define MAX_IDX		(16384 >> BLK_SHR) | ||||
| #define MAX_SPC		(4096 >> BLK_SHR) | ||||
| 
 | ||||
| #define COM_LEN		4096 | ||||
| #define COM_SEC		(COM_LEN >> BLK_SHR) | ||||
| 
 | ||||
| #define BMP_LEN		4096 | ||||
| 
 | ||||
| #define AF_ALST		1 | ||||
| #define AF_MMFT		2 | ||||
| #define AF_GPOS		4 | ||||
| 
 | ||||
| #define RF_COMP		1 | ||||
| #define RF_CBLK		2 | ||||
| #define RF_BLNK		4 | ||||
| 
 | ||||
| #define valueat(buf,ofs,type)	*((type*)(((char*)buf)+ofs)) | ||||
| 
 | ||||
| #define u16at(buf,ofs)	grub_le_to_cpu16(valueat(buf,ofs,grub_uint16_t)) | ||||
| #define u32at(buf,ofs)	grub_le_to_cpu32(valueat(buf,ofs,grub_uint32_t)) | ||||
| #define u64at(buf,ofs)	grub_le_to_cpu64(valueat(buf,ofs,grub_uint64_t)) | ||||
| 
 | ||||
| #define v16at(buf,ofs)	valueat(buf,ofs,grub_uint16_t) | ||||
| #define v32at(buf,ofs)	valueat(buf,ofs,grub_uint32_t) | ||||
| #define v64at(buf,ofs)	valueat(buf,ofs,grub_uint64_t) | ||||
| 
 | ||||
| struct grub_ntfs_bpb | ||||
| { | ||||
|   grub_uint8_t jmp_boot[3]; | ||||
|   grub_uint8_t oem_name[8]; | ||||
|   grub_uint16_t bytes_per_sector; | ||||
|   grub_uint8_t sectors_per_cluster; | ||||
|   grub_uint8_t reserved_1[7]; | ||||
|   grub_uint8_t media; | ||||
|   grub_uint16_t reserved_2; | ||||
|   grub_uint16_t sectors_per_track; | ||||
|   grub_uint16_t num_heads; | ||||
|   grub_uint32_t num_hidden_sectors; | ||||
|   grub_uint32_t reserved_3[2]; | ||||
|   grub_uint64_t num_total_sectors; | ||||
|   grub_uint64_t mft_lcn; | ||||
|   grub_uint64_t mft_mirr_lcn; | ||||
|   grub_int8_t clusters_per_mft; | ||||
|   grub_int8_t reserved_4[3]; | ||||
|   grub_int8_t clusters_per_index; | ||||
|   grub_int8_t reserved_5[3]; | ||||
|   grub_uint64_t serial_number; | ||||
|   grub_uint32_t checksum; | ||||
| } __attribute__ ((packed)); | ||||
| 
 | ||||
| #define grub_ntfs_file grub_fshelp_node | ||||
| 
 | ||||
| struct grub_ntfs_attr | ||||
| { | ||||
|   int flags; | ||||
|   char *emft_buf, *edat_buf; | ||||
|   char *attr_cur, *attr_nxt, *attr_end; | ||||
|   grub_uint32_t save_pos; | ||||
|   char *sbuf; | ||||
|   struct grub_ntfs_file *mft; | ||||
| }; | ||||
| 
 | ||||
| struct grub_fshelp_node | ||||
| { | ||||
|   struct grub_ntfs_data *data; | ||||
|   char *buf; | ||||
|   grub_uint32_t size; | ||||
|   grub_uint32_t ino; | ||||
|   int inode_read; | ||||
|   struct grub_ntfs_attr attr; | ||||
| }; | ||||
| 
 | ||||
| struct grub_ntfs_data | ||||
| { | ||||
|   struct grub_ntfs_file cmft; | ||||
|   struct grub_ntfs_file mmft; | ||||
|   grub_disk_t disk; | ||||
|   grub_uint32_t mft_size; | ||||
|   grub_uint32_t idx_size; | ||||
|   grub_uint32_t spc; | ||||
|   grub_uint32_t blocksize; | ||||
|   grub_uint32_t mft_start; | ||||
| }; | ||||
| 
 | ||||
| struct grub_ntfs_comp | ||||
| { | ||||
|   grub_disk_t disk; | ||||
|   int comp_head, comp_tail; | ||||
|   grub_uint32_t comp_table[16][2]; | ||||
|   grub_uint32_t cbuf_ofs, cbuf_vcn, spc; | ||||
|   char *cbuf; | ||||
| }; | ||||
| 
 | ||||
| struct grub_ntfs_rlst | ||||
| { | ||||
|   int flags; | ||||
|   grub_uint32_t target_vcn, curr_vcn, next_vcn, curr_lcn; | ||||
|   char *cur_run; | ||||
|   struct grub_ntfs_attr *attr; | ||||
|   struct grub_ntfs_comp comp; | ||||
| }; | ||||
| 
 | ||||
| typedef grub_err_t (*ntfscomp_func_t) (struct grub_ntfs_attr * at, char *dest, | ||||
| 				       grub_uint32_t ofs, grub_uint32_t len, | ||||
| 				       struct grub_ntfs_rlst * ctx, | ||||
| 				       grub_uint32_t vcn); | ||||
| 
 | ||||
| extern ntfscomp_func_t EXPORT_VAR (grub_ntfscomp_func); | ||||
| 
 | ||||
| grub_err_t EXPORT_FUNC(grub_ntfs_read_run_list) (struct grub_ntfs_rlst *ctx); | ||||
| 
 | ||||
| #endif /* ! GRUB_NTFS_H */ | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue