summaryrefslogtreecommitdiffstats
path: root/meta/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git.patch
blob: 555565449020790f81f3cf03fa7064bfc71adc5e (plain)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
---
 mkfs.jffs2.c |   44 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 42 insertions(+), 2 deletions(-)

--- git.orig/mkfs.jffs2.c
+++ git/mkfs.jffs2.c
@@ -98,10 +98,16 @@ struct filesystem_entry {
 	struct filesystem_entry *next;	/* Only relevant to non-directories */
 	struct filesystem_entry *files;	/* Only relevant to directories */
 	struct rb_node hardlink_rb;
 };
 
+struct ignorepath_entry {
+	struct ignorepath_entry* next;	/* Points to the next ignorepath element */
+	char name[PATH_MAX];		/* Name of the entry */
+};
+
+static struct ignorepath_entry* ignorepath = 0;
 struct rb_root hardlinks;
 static int out_fd = -1;
 static int in_fd = -1;
 static char default_rootdir[] = ".";
 static char *rootdir = default_rootdir;
@@ -404,19 +410,28 @@ static struct filesystem_entry *recursiv
 	int i, n;
 	struct stat sb;
 	char *hpath, *tpath;
 	struct dirent *dp, **namelist;
 	struct filesystem_entry *entry;
-
+	struct ignorepath_entry* element = ignorepath;
 
 	if (lstat(hostpath, &sb)) {
 		perror_msg_and_die("%s", hostpath);
 	}
 
 	entry = add_host_filesystem_entry(targetpath, hostpath,
 			sb.st_uid, sb.st_gid, sb.st_mode, 0, parent);
 
+	while ( element ) {
+		if ( strcmp( element->name, targetpath ) == 0 ) {
+			printf( "Note: ignoring directories below '%s'\n", targetpath );
+			return entry;
+			break;
+		}
+		element = element->next;
+	}
+
 	n = scandir(hostpath, &namelist, 0, alphasort);
 	if (n < 0) {
 		perror_msg_and_die("opening directory %s", hostpath);
 	}
 
@@ -1446,10 +1461,11 @@ static void create_target_filesystem(str
 static struct option long_options[] = {
 	{"pad", 2, NULL, 'p'},
 	{"root", 1, NULL, 'r'},
 	{"pagesize", 1, NULL, 's'},
 	{"eraseblock", 1, NULL, 'e'},
+	{"ignore", 1, NULL, 'I'},
 	{"output", 1, NULL, 'o'},
 	{"help", 0, NULL, 'h'},
 	{"verbose", 0, NULL, 'v'},
 	{"version", 0, NULL, 'V'},
 	{"big-endian", 0, NULL, 'b'},
@@ -1493,10 +1509,11 @@ static char *helptext =
 "  -y, --compressor-priority=PRIORITY:COMPRESSOR_NAME\n"
 "                          Set the priority of a compressor\n"
 "  -L, --list-compressors  Show the list of the avaiable compressors\n"
 "  -t, --test-compression  Call decompress and compare with the original (for test)\n"
 "  -n, --no-cleanmarkers   Don't add a cleanmarker to every eraseblock\n"
+"  -I, --ignore=PATH       Ignore sub directory and file tree below PATH when recursing over the file system\n"
 "  -o, --output=FILE       Output to FILE (default: stdout)\n"
 "  -l, --little-endian     Create a little-endian filesystem\n"
 "  -b, --big-endian        Create a big-endian filesystem\n"
 "  -D, --devtable=FILE     Use the named FILE as a device table file\n"
 "  -f, --faketime          Change all file times to '0' for regression testing\n"
@@ -1659,21 +1676,22 @@ int main(int argc, char **argv)
 	FILE *devtable = NULL;
 	struct filesystem_entry *root;
 	char *compr_name = NULL;
 	int compr_prior  = -1;
 	int warn_page_size = 0;
+  	struct ignorepath_entry* element = ignorepath;
 
 	page_size = sysconf(_SC_PAGESIZE);
 	if (page_size < 0) /* System doesn't know so ... */
 		page_size = 4096; /* ... we make an educated guess */
 	if (page_size != 4096)
 		warn_page_size = 1; /* warn user if page size not 4096 */
 
 	jffs2_compressors_init();
 
 	while ((opt = getopt_long(argc, argv,
-					"D:d:r:s:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
+   					"D:d:r:s:I:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
 	{
 		switch (opt) {
 			case 'D':
 				devtable = xfopen(optarg, "r");
 				if (fstat(fileno(devtable), &sb) < 0)
@@ -1693,10 +1711,32 @@ int main(int argc, char **argv)
 			case 's':
 				page_size = strtol(optarg, NULL, 0);
 				warn_page_size = 0; /* set by user, so don't need to warn */
 				break;
 
+			case 'I':
+				printf( "Note: Adding '%s' to ignore Path\n", optarg );
+				element = ignorepath;
+				if ( !ignorepath ) {
+					ignorepath = xmalloc( sizeof( struct ignorepath_entry ) );
+					ignorepath->next = 0;
+					strcpy( &ignorepath->name[0], optarg );
+				} else {
+					while ( element->next ) element = element->next;
+					element->next = xmalloc( sizeof( struct ignorepath_entry ) );
+ 					element->next->next = 0;
+					strcpy( &element->next->name[0], optarg );
+				}
+				printf( "--------- Dumping ignore path list ----------------\n" );
+				element = ignorepath;
+				while ( element ) {
+					printf( "  * '%s'\n", &element->name[0] );
+					element = element->next;
+				}
+				printf( "---------------------------------------------------\n" );
+				break;
+
 			case 'o':
 				if (out_fd != -1) {
 					error_msg_and_die("output filename specified more than once");
 				}
 				out_fd = open(optarg, O_CREAT | O_TRUNC | O_RDWR, 0644);