| Upstream-Status: Pending |
| |
| Index: git/jffsX-utils/mkfs.jffs2.c |
| =================================================================== |
| --- git.orig/jffsX-utils/mkfs.jffs2.c |
| +++ git/jffsX-utils/mkfs.jffs2.c |
| @@ -100,6 +100,11 @@ struct filesystem_entry { |
| 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; |
| @@ -309,7 +314,7 @@ static struct filesystem_entry *recursiv |
| char *hpath, *tpath; |
| struct dirent *dp, **namelist; |
| struct filesystem_entry *entry; |
| - |
| + struct ignorepath_entry* element = ignorepath; |
| |
| if (lstat(hostpath, &sb)) { |
| sys_errmsg_die("%s", hostpath); |
| @@ -318,6 +323,15 @@ static struct filesystem_entry *recursiv |
| 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) { |
| sys_errmsg_die("opening directory %s", hostpath); |
| @@ -1359,6 +1373,7 @@ static struct option long_options[] = { |
| {"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'}, |
| @@ -1409,6 +1424,7 @@ static const char helptext[] = |
| " -L, --list-compressors Show the list of the available 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" |
| @@ -1566,6 +1582,7 @@ int main(int argc, char **argv) |
| 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 ... */ |
| @@ -1576,7 +1593,7 @@ int main(int argc, char **argv) |
| 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': |
| @@ -1600,6 +1617,28 @@ int main(int argc, char **argv) |
| 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) { |
| errmsg_die("output filename specified more than once"); |