diff options
author | robi <robi> | 2011-04-05 01:09:36 +0000 |
---|---|---|
committer | robi <robi> | 2011-04-05 01:09:36 +0000 |
commit | c98aee37f48b9523e2eceef61949aeda958ed3f8 (patch) | |
tree | d47c574fed29fb7bd7fbef0f0860460177f130de | |
parent | 891877f331bc93afd5fe8b33ee89acdee67ac162 (diff) |
first functions of expert-mode
-rw-r--r-- | src/ext4magic.c | 43 | ||||
-rw-r--r-- | src/journal.c | 6 |
2 files changed, 40 insertions, 9 deletions
diff --git a/src/ext4magic.c b/src/ext4magic.c index 703c3d5..5ac418d 100644 --- a/src/ext4magic.c +++ b/src/ext4magic.c @@ -305,7 +305,11 @@ t_after = t_before - 86400 ; // decode arguments +#ifdef EXPERT_MODE +while ((c = getopt (argc, argv, "TJRMLlmrQSxi:t:j:f:Vd:B:b:a:I:Hs:n:c")) != EOF) { +#else while ((c = getopt (argc, argv, "TJRMLlmrQSxi:t:j:f:Vd:B:b:a:I:H")) != EOF) { +#endif switch (c) { case 'M': //not active, still in development @@ -489,10 +493,6 @@ while ((c = getopt (argc, argv, "TJRMLlmrQSxi:t:j:f:Vd:B:b:a:I:H")) != EOF) { mode |= HIGH_QUALITY; break; - case 'w'://experimental not activ at default - journal_backup=1; - break; - case 'j': j_file_name = optarg; retval = stat (j_file_name, &filestat); @@ -514,15 +514,44 @@ while ((c = getopt (argc, argv, "TJRMLlmrQSxi:t:j:f:Vd:B:b:a:I:H")) != EOF) { pathname = malloc(512); strcpy(pathname,optarg); break; - - case 'v'://experimental not activ at default +#ifdef EXPERT_MODE + case 'c': + journal_backup=1; + break; + + case 's': blocksize = parse_ulong(optarg, argv[0], "block size", 0); + if ((!blocksize) || (blocksize % 1024)){ + fprintf(stderr,"Error: Invalid parameter: -s %d\n", blocksize); + fprintf(stderr,"ERROR: blocksize allowed only 1024 ; 2048 or 4096\n"); + exitval = EXIT_FAILURE ; + goto errout; + } break; - case 's'://experimental not activ at default + case 'n': superblock = parse_ulong(optarg, argv[0], "superblock number", 0); + if ((!superblock) || (!blocksize) || ((blocksize * 8) > superblock)){ + fprintf(stderr,"Error: Invalid parameter: -s %d\n", superblock); + switch (blocksize){ + case 1024: + fprintf(stderr, "blocksize 1024 posible 8193, 24577, 40961, 57345 ....\n"); + break; + case 2048: + fprintf(stderr, "blocksize 2048 posible 16384, 49152, 81920, 114688 ....\n"); + break; + case 4096: + fprintf(stderr, "blocksize 4096 posible 32768, 98304, 163840, 229376 ....\n"); + break; + default: + fprintf(stderr, "blocksize unknown\n"); + } + exitval = EXIT_FAILURE ; + goto errout; + } break; +#endif case 'T': mode |= PRINT_BLOCKLIST; mode |= READ_JOURNAL; diff --git a/src/journal.c b/src/journal.c index c8e8810..d7c6927 100644 --- a/src/journal.c +++ b/src/journal.c @@ -176,7 +176,9 @@ extern int journal_open( char *journal_file_name, int journal_backup_flag ) memcpy(&journal_inode.i_block[0], jsb_pointer->s_jnl_blocks, EXT2_N_BLOCKS*4); journal_inode.i_size = jsb_pointer->s_jnl_blocks[16]; journal_inode.i_links_count = 1; - journal_inode.i_mode = LINUX_S_IFREG | 0600; + journal_inode.i_mode = LINUX_S_IFREG | 0600; + if (jsb_pointer->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS) + journal_inode.i_flags |= EXT4_EXTENTS_FL; } else { if (intern_read_inode(journal_inum, &journal_inode)) goto errout; @@ -191,7 +193,7 @@ extern int journal_open( char *journal_file_name, int journal_backup_flag ) journal_source.where = JOURNAL_IS_INTERNAL; journal_source.file = journal_file; journal_source.fd = -1 ; - printf("Using internal Journal at Inode %d\n",journal_inum); + printf("Using %s internal Journal at Inode %d\n",(journal_backup_flag)?"a recovered":"",journal_inum); } else { char uuid[37]; |