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@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