summaryrefslogtreecommitdiff
path: root/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-20041113.patch
blob: cb819e19be2a76987558426a6582bd536d7b20f0 (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

#
# Patch managed by http://www.holgerschurig.de/patcher.html
#

--- mtd/util/mkfs.jffs2.c~add-exclusion-to-mkfs-jffs2.patch
+++ mtd/util/mkfs.jffs2.c
@@ -89,7 +89,12 @@
 	struct filesystem_entry *files;	/* Only relevant to directories */
 };
 
+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;
 static int out_fd = -1;
 static char default_rootdir[] = ".";
 static char *rootdir = default_rootdir;
@@ -363,6 +368,7 @@
 	char *hpath, *tpath;
 	struct dirent *dp, **namelist;
 	struct filesystem_entry *entry;
+    struct ignorepath_entry* element = ignorepath;
 
 
 	if (lstat(hostpath, &sb)) {
@@ -372,6 +378,15 @@
 	entry = add_host_filesystem_entry(targetpath, hostpath, 
 			sb.st_uid, sb.st_gid, sb.st_mode, 0, parent);
 
+	while ( element ) {
+		if ( strcmp( element->name, hostpath ) == 0 ) {
+			printf( "Note: ignoring directories below '%s'\n", hostpath );
+			return entry;
+			break;
+		}
+		element = element->next;
+	}
+
 	n = scandir(hostpath, &namelist, 0, alphasort);
 	if (n < 0) {
 		perror_msg_and_die("opening directory %s", hostpath);
@@ -1139,6 +1154,7 @@
 	{"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'},
@@ -1180,6 +1196,7 @@
         "  -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"
@@ -1202,13 +1219,14 @@
 	struct stat sb;
 	FILE *devtable = NULL;
 	struct filesystem_entry *root;
-        char *compr_name = NULL;
-        int compr_prior  = -1;
+	char *compr_name = NULL;
+	int compr_prior  = -1;
+	struct ignorepath_entry* element = ignorepath;
 
-        jffs2_compressors_init();
+	jffs2_compressors_init();
 
 	while ((opt = getopt_long(argc, argv, 
-					"D:d:r:s:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:", long_options, &c)) >= 0) 
+					"D:d:r:s:i:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:", long_options, &c)) >= 0) 
 	{
 		switch (opt) {
 			case 'D':
@@ -1231,6 +1249,27 @@
 				page_size = strtol(optarg, NULL, 0);
 				break;
 
+			case 'i':
+				printf( "Note: Adding '%s' to ignore Path\n", optarg );
+				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");