Home | History | Annotate | Download | only in squashfs-tools
      1 #ifndef MKSQUASHFS_H
      2 #define MKSQUASHFS_H
      3 /*
      4  * Squashfs
      5  *
      6  * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
      7  * 2012, 2013, 2014
      8  * Phillip Lougher <phillip (at) squashfs.org.uk>
      9  *
     10  * This program is free software; you can redistribute it and/or
     11  * modify it under the terms of the GNU General Public License
     12  * as published by the Free Software Foundation; either version 2,
     13  * or (at your option) any later version.
     14  *
     15  * This program is distributed in the hope that it will be useful,
     16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     18  * GNU General Public License for more details.
     19  *
     20  * You should have received a copy of the GNU General Public License
     21  * along with this program; if not, write to the Free Software
     22  * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     23  *
     24  * mksquashfs.h
     25  *
     26  */
     27 /* ANDROID CHANGES START*/
     28 #ifdef ANDROID
     29 #include <stdint.h>
     30 #endif
     31 /* ANDROID CHANGES END */
     32 #include <pthread.h>
     33 
     34 struct dir_info {
     35 	char			*pathname;
     36 	char			*subpath;
     37 	unsigned int		count;
     38 	unsigned int		directory_count;
     39 	int			depth;
     40 	unsigned int		excluded;
     41 	char			dir_is_ldir;
     42 	struct dir_ent		*dir_ent;
     43 	struct dir_ent		*list;
     44 	DIR			*linuxdir;
     45 };
     46 
     47 struct dir_ent {
     48 	char			*name;
     49 	char			*source_name;
     50 	char			*nonstandard_pathname;
     51 	struct inode_info	*inode;
     52 	struct dir_info		*dir;
     53 	struct dir_info		*our_dir;
     54 	struct dir_ent		*next;
     55 /* ANDROID CHANGES START*/
     56 #ifdef ANDROID
     57 	uint64_t capabilities;
     58 #endif
     59 /* ANDROID CHANGES END */
     60 };
     61 
     62 struct inode_info {
     63 	struct stat		buf;
     64 	struct inode_info	*next;
     65 	squashfs_inode		inode;
     66 	unsigned int		inode_number;
     67 	unsigned int		nlink;
     68 	int			pseudo_id;
     69 	char			type;
     70 	char			read;
     71 	char			root_entry;
     72 	char			pseudo_file;
     73 	char			no_fragments;
     74 	char			always_use_fragments;
     75 	char			noD;
     76 	char			noF;
     77 	char			symlink[0];
     78 };
     79 
     80 /* in memory file info */
     81 struct file_info {
     82 	long long		file_size;
     83 	long long		bytes;
     84 	long long		start;
     85 	unsigned int		*block_list;
     86 	struct file_info	*next;
     87 	struct fragment		*fragment;
     88 	unsigned short		checksum;
     89 	unsigned short		fragment_checksum;
     90 	char			have_frag_checksum;
     91 	char			have_checksum;
     92 };
     93 
     94 /* fragment block data structures */
     95 struct fragment {
     96 	unsigned int		index;
     97 	int			offset;
     98 	int			size;
     99 };
    100 
    101 /* in memory uid tables */
    102 #define ID_ENTRIES 256
    103 #define ID_HASH(id) (id & (ID_ENTRIES - 1))
    104 #define ISA_UID 1
    105 #define ISA_GID 2
    106 
    107 struct id {
    108 	unsigned int id;
    109 	int	index;
    110 	char	flags;
    111 	struct id *next;
    112 };
    113 
    114 /* fragment to file mapping used when appending */
    115 struct append_file {
    116 	struct file_info *file;
    117 	struct append_file *next;
    118 };
    119 
    120 #define PSEUDO_FILE_OTHER	1
    121 #define PSEUDO_FILE_PROCESS	2
    122 
    123 #define IS_PSEUDO(a)		((a)->pseudo_file)
    124 #define IS_PSEUDO_PROCESS(a)	((a)->pseudo_file & PSEUDO_FILE_PROCESS)
    125 #define IS_PSEUDO_OTHER(a)	((a)->pseudo_file & PSEUDO_FILE_OTHER)
    126 
    127 /*
    128  * Amount of physical memory to use by default, and the default queue
    129  * ratios
    130  */
    131 #define SQUASHFS_TAKE 4
    132 #define SQUASHFS_READQ_MEM 4
    133 #define SQUASHFS_BWRITEQ_MEM 4
    134 #define SQUASHFS_FWRITEQ_MEM 4
    135 
    136 /*
    137  * Lowest amount of physical memory considered viable for Mksquashfs
    138  * to run in Mbytes
    139  */
    140 #define SQUASHFS_LOWMEM 64
    141 
    142 /* offset of data in compressed metadata blocks (allowing room for
    143  * compressed size */
    144 #define BLOCK_OFFSET 2
    145 
    146 extern struct cache *reader_buffer, *fragment_buffer, *reserve_cache;
    147 struct cache *bwriter_buffer, *fwriter_buffer;
    148 extern struct queue *to_reader, *to_deflate, *to_writer, *from_writer,
    149 	*to_frag, *locked_fragment, *to_process_frag;
    150 extern struct append_file **file_mapping;
    151 extern struct seq_queue *to_main;
    152 extern pthread_mutex_t fragment_mutex, dup_mutex;
    153 extern struct squashfs_fragment_entry *fragment_table;
    154 extern struct compressor *comp;
    155 extern int block_size;
    156 extern struct file_info *dupl[];
    157 extern int read_fs_bytes(int, long long, int, void *);
    158 extern void add_file(long long, long long, long long, unsigned int *, int,
    159 	unsigned int, int, int);
    160 extern struct id *create_id(unsigned int);
    161 extern unsigned int get_uid(unsigned int);
    162 extern unsigned int get_guid(unsigned int);
    163 extern int read_bytes(int, void *, int);
    164 extern unsigned short get_checksum_mem(char *, int);
    165 #endif
    166