diff mbox

[1/1] handle e2image offset value better

Message ID CAGW2f1ES7Gji4hXEeMzCSdH3VabXU7SeD-4cg4GL6K9ArugwHw@mail.gmail.com
State Rejected, archived
Headers show

Commit Message

jon ernst Jan. 5, 2014, 4:42 a.m. UTC
current e2image cannot handle offset value as 0.

For example,
e2image -aro   0 /dev/sda7 ~/e2image7
will return usage()
but
e2image -aro   1 /dev/sda7 ~/e2image7
is fine.


Signed-off-by: "Jon Ernst" <jonernst07@gmail.com>
---
 misc/e2image.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Comments

Theodore Ts'o Jan. 11, 2014, 6:43 p.m. UTC | #1
On Sun, Jan 05, 2014 at 04:42:42AM +0000, jon ernst wrote:
> current e2image cannot handle offset value as 0.
> 
> For example,
> e2image -aro   0 /dev/sda7 ~/e2image7
> will return usage()
> but
> e2image -aro   1 /dev/sda7 ~/e2image7
> is fine.

I'm not seeing a problem;

    cp /dev/null /tmp/foo.img
    mke2fs -t ext4 -F /tmp/foo.img 100
    e2image -aro 0 /tmp/foo.img /tmp/bar.img

Is working just fine for me.

Looking at your patch, I don't think it's correct.  We only want to go
into "move mode" when the user has specified a single argument, and
either the source or destination is non-zero, and of course this
really only makes sense when we are in raw mode.

That's what the code is currently doing.  If I were going to make any
changes, I'd probably change the criteria so that we check to see if
the source and destination offset is identical (since then it's just a
no-op), and we should probably enforce the restriction that we only
allow move mode when the user has specified both the -a and the -r
option.  (Otherwise, they will destroy the data on their file system,
which is probably not the result they were looking for.)

Regards,

						- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
jon ernst Jan. 11, 2014, 8:08 p.m. UTC | #2
On Sat, Jan 11, 2014 at 6:43 PM, Theodore Ts'o <tytso@mit.edu> wrote:
> On Sun, Jan 05, 2014 at 04:42:42AM +0000, jon ernst wrote:
>> current e2image cannot handle offset value as 0.
>>
>> For example,
>> e2image -aro   0 /dev/sda7 ~/e2image7
>> will return usage()
>> but
>> e2image -aro   1 /dev/sda7 ~/e2image7
>> is fine.
>
> I'm not seeing a problem;
>
>     cp /dev/null /tmp/foo.img
>     mke2fs -t ext4 -F /tmp/foo.img 100
>     e2image -aro 0 /tmp/foo.img /tmp/bar.img
>
Yes, agree. Actually I meant to send test like this:

e2image -aro 0 /tmp/foo.img

This will return usage(). As you mentioned, only "non-zero" argument
makes sense. I agree too.





> Is working just fine for me.
>
> Looking at your patch, I don't think it's correct.  We only want to go
> into "move mode" when the user has specified a single argument, and
> either the source or destination is non-zero, and of course this
> really only makes sense when we are in raw mode.
>
> That's what the code is currently doing.  If I were going to make any
> changes, I'd probably change the criteria so that we check to see if
> the source and destination offset is identical (since then it's just a
> no-op), and we should probably enforce the restriction that we only
> allow move mode when the user has specified both the -a and the -r
> option.  (Otherwise, they will destroy the data on their file system,
> which is probably not the result they were looking for.)

I tested, this restriction is there.

Thank you for your response.
Sorry for useless patch.

Jon
>
> Regards,
>
>                                                 - Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/misc/e2image.c b/misc/e2image.c
index 74515c8..af97d7a 100644
--- a/misc/e2image.c
+++ b/misc/e2image.c
@@ -1485,9 +1485,11 @@  int main (int argc, char ** argv)
             break;
         case 'o':
             source_offset = strtoull(optarg, NULL, 0);
+            move_mode = 1;
             break;
         case 'O':
             dest_offset = strtoull(optarg, NULL, 0);
+            move_mode = 1;
             break;
         case 'p':
             show_progress = 1;
@@ -1498,10 +1500,7 @@  int main (int argc, char ** argv)
         default:
             usage();
         }
-    if (optind == argc - 1 &&
-        (source_offset || dest_offset))
-            move_mode = 1;
-    else if (optind != argc - 2 )
+    if ((optind != argc - 2 ) && (move_mode))
         usage();

     if (all_data && !img_type) {