diff options
author | Francesco Cosoleto | 2012-01-16 06:36:13 +0100 |
---|---|---|
committer | Karel Zak | 2012-01-16 21:53:00 +0100 |
commit | 0c381880282b9365aaf9e8457c69750c12c4d9b2 (patch) | |
tree | 530b1578512193cfb750be3d3ad54b7b1ef7ad73 /fdisk/fdisk.c | |
parent | fdisk: rename read_int_sx() and some related variables (diff) | |
download | kernel-qcow2-util-linux-0c381880282b9365aaf9e8457c69750c12c4d9b2.tar.gz kernel-qcow2-util-linux-0c381880282b9365aaf9e8457c69750c12c4d9b2.tar.xz kernel-qcow2-util-linux-0c381880282b9365aaf9e8457c69750c12c4d9b2.zip |
fdisk: fix last sector dialog bug after an incorrect input with suffix
If user input in a last sector dialog was out of range and with suffix, and if
this was followed by accepting the default value, then the used last sector was
erroneously default - 1.
Reported-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
Signed-off-by: Francesco Cosoleto <cosoleto@gmail.com>
Diffstat (limited to 'fdisk/fdisk.c')
-rw-r--r-- | fdisk/fdisk.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c index 764798d17..cb67fd3ee 100644 --- a/fdisk/fdisk.c +++ b/fdisk/fdisk.c @@ -1303,6 +1303,7 @@ read_int_with_suffix(unsigned int low, unsigned int dflt, unsigned int high, { unsigned int res; int default_ok = 1; + int absolute = 0; static char *ms = NULL; static size_t mslen = 0; @@ -1331,9 +1332,9 @@ read_int_with_suffix(unsigned int low, unsigned int dflt, unsigned int high, if (*line_ptr == '+' || *line_ptr == '-') { int minus = (*line_ptr == '-'); - int absolute = 0; int suflen; + absolute = 0; res = atoi(line_ptr + 1); while (isdigit(*++line_ptr)) @@ -1400,8 +1401,6 @@ read_int_with_suffix(unsigned int low, unsigned int dflt, unsigned int high, bytes += unit/2; /* round */ bytes /= unit; res = bytes; - if (is_suffix_used) - *is_suffix_used = absolute; } if (minus) res = -res; @@ -1413,13 +1412,17 @@ read_int_with_suffix(unsigned int low, unsigned int dflt, unsigned int high, use_default = 0; } } - if (use_default) - printf(_("Using default value %u\n"), res = dflt); + if (use_default) { + printf(_("Using default value %u\n"), dflt); + return dflt; + } if (res >= low && res <= high) break; else printf(_("Value out of range.\n")); } + if (is_suffix_used) + *is_suffix_used = absolute > 0; return res; } |