]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
debugfs: fix parse_uint for 64-bit fields
authorTheodore Ts'o <tytso@mit.edu>
Tue, 6 Oct 2020 12:29:09 +0000 (08:29 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 6 Oct 2020 12:29:09 +0000 (08:29 -0400)
The logic for handling 64-bit structure elements was reversed, which
caused attempts to set fields like kbytes_written to fail:

    % debugfs -w /tmp/foo.img
    debugfs 1.45.6 (20-Mar-2020)
    debugfs:  set_super_value kbytes_written 1024
    64-bit field kbytes_written has a second 64-bit field
    defined; BUG?!?

https://github.com/tytso/e2fsprogs/issues/36

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
debugfs/set_fields.c

index 5142554dfde6237e34e67074eb5018c17e250d11..281f2c5dfa52af8295dd329c3d4176db4037b237 100644 (file)
@@ -487,10 +487,7 @@ static errcode_t parse_uint(struct field_set_info *info, char *field,
        n = num & mask;
        switch (size) {
        case 8:
-               /* Should never get here */
-               fprintf(stderr, "64-bit field %s has a second 64-bit field\n"
-                       "defined; BUG?!?\n", info->name);
-               *u.ptr64 = 0;
+               *u.ptr64 = n;
                break;
        case 4:
                *u.ptr32 = n;
@@ -510,7 +507,10 @@ static errcode_t parse_uint(struct field_set_info *info, char *field,
                size = 2;
        switch (size) {
        case 8:
-               *u.ptr64 = n;
+               /* Should never get here */
+               fprintf(stderr, "64-bit field %s has a second 64-bit field\n"
+                       "defined; BUG?!?\n", info->name);
+               *u.ptr64 = 0;
                break;
        case 4:
                *u.ptr32 = n;