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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#ifndef PSEUDO_H
#define PSEUDO_H
/*
* Create a squashfs filesystem. This is a highly compressed read only
* filesystem.
*
* Copyright (c) 2009, 2010, 2014, 2017, 2021, 2022, 2023
* Phillip Lougher <phillip@squashfs.org.uk>
*
* This program 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 2,
* or (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* pseudo.h
*/
#define PSEUDO_FILE_OTHER 1
#define PSEUDO_FILE_PROCESS 2
#define PSEUDO_FILE_DATA 4
#define IS_PSEUDO(a) ((a)->pseudo)
#define IS_PSEUDO_PROCESS(a) ((a)->pseudo && ((a)->pseudo->pseudo_type & PSEUDO_FILE_PROCESS))
#define IS_PSEUDO_OTHER(a) ((a)->pseudo && ((a)->pseudo->pseudo_type & PSEUDO_FILE_OTHER))
#define IS_PSEUDO_DATA(a) ((a)->pseudo && ((a)->pseudo->pseudo_type & PSEUDO_FILE_DATA))
struct pseudo_stat {
unsigned int mode;
unsigned int uid;
unsigned int gid;
unsigned int major;
unsigned int minor;
time_t mtime;
int ino;
};
struct pseudo_file {
char *filename;
long long start;
long long current;
int fd;
};
struct pseudo_data {
struct pseudo_file *file;
long long offset;
long long length;
int sparse;
};
struct pseudo_dev {
char type;
int pseudo_type;
union {
struct pseudo_stat *buf;
struct stat *linkbuf;
};
union {
struct pseudo_data *data;
char *command;
char *symlink;
char *linkname;
};
};
struct pseudo_entry {
char *name;
char *pathname;
struct pseudo *pseudo;
struct pseudo_dev *dev;
struct pseudo_xattr *xattr;
};
struct pseudo {
int names;
int count;
struct pseudo_entry *name;
};
struct pseudo_xattr {
int count;
struct xattr_add *xattr;
};
extern struct pseudo *pseudo;
extern long long read_bytes(int, void *, long long);
extern int read_pseudo_definition(char *, char *);
extern int read_pseudo_file(char *, char *);
extern struct pseudo *pseudo_subdir(char *, struct pseudo *);
extern struct pseudo_entry *pseudo_readdir(struct pseudo *);
extern struct pseudo_dev *get_pseudo_file(int);
extern int pseudo_exec_file(struct pseudo_dev *, int *);
extern struct pseudo *get_pseudo();
extern void dump_pseudos();
extern char *get_element(char *target, char **targname);
extern void print_definitions();
#endif
|