Upstream-Status: Pending --- /tmp/mkfs.jffs2.c 2009-01-11 15:28:41.000000000 +0100 +++ git/mkfs.jffs2.c 2009-01-11 15:59:29.000000000 +0100 @@ -100,6 +100,11 @@ 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; @@ -408,7 +413,7 @@ 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); @@ -417,6 +422,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, 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); @@ -1453,6 +1467,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'}, @@ -1500,6 +1515,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" @@ -1666,6 +1682,7 @@ 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 ... */ @@ -1676,7 +1693,7 @@ 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': @@ -1700,6 +1717,28 @@ 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");