fdisk: sync up with some util-linux 2.31 behavior
= display default is no longer in cylinders = +sizeC is no longer supported = add +sizeT suffix - terabytes are here = K,M,G,T and k,m,g,t suffixes all are binary, not decimal = +sizeM results in last sector +(size * 1Mbyte - 1), not +(size * 1Mbyte) = fix comparison to "YES" answer for sgi/sun function old new delta read_int 492 519 +27 fdisk_main 2644 2640 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 27/-4) Total: 23 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
163e637ffb
commit
c104549b48
@ -426,7 +426,7 @@ struct globals {
|
|||||||
unsigned sector_offset; // = 1;
|
unsigned sector_offset; // = 1;
|
||||||
unsigned g_heads, g_sectors, g_cylinders;
|
unsigned g_heads, g_sectors, g_cylinders;
|
||||||
smallint /* enum label_type */ current_label_type;
|
smallint /* enum label_type */ current_label_type;
|
||||||
smallint display_in_cyl_units; // = 1;
|
smallint display_in_cyl_units;
|
||||||
#if ENABLE_FEATURE_OSF_LABEL
|
#if ENABLE_FEATURE_OSF_LABEL
|
||||||
smallint possibly_osf_label;
|
smallint possibly_osf_label;
|
||||||
#endif
|
#endif
|
||||||
@ -488,7 +488,6 @@ struct globals {
|
|||||||
sector_size = DEFAULT_SECTOR_SIZE; \
|
sector_size = DEFAULT_SECTOR_SIZE; \
|
||||||
sector_offset = 1; \
|
sector_offset = 1; \
|
||||||
g_partitions = 4; \
|
g_partitions = 4; \
|
||||||
display_in_cyl_units = 1; \
|
|
||||||
units_per_sector = 1; \
|
units_per_sector = 1; \
|
||||||
dos_compatible_flag = 1; \
|
dos_compatible_flag = 1; \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -639,25 +638,6 @@ seek_sector(sector_t secno)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_FEATURE_FDISK_WRITABLE
|
#if ENABLE_FEATURE_FDISK_WRITABLE
|
||||||
/* Read line; return 0 or first printable char */
|
|
||||||
static int
|
|
||||||
read_line(const char *prompt)
|
|
||||||
{
|
|
||||||
int sz;
|
|
||||||
|
|
||||||
sz = read_line_input(NULL, prompt, line_buffer, sizeof(line_buffer));
|
|
||||||
if (sz <= 0)
|
|
||||||
exit(EXIT_SUCCESS); /* Ctrl-D or Ctrl-C */
|
|
||||||
|
|
||||||
if (line_buffer[sz-1] == '\n')
|
|
||||||
line_buffer[--sz] = '\0';
|
|
||||||
|
|
||||||
line_ptr = line_buffer;
|
|
||||||
while (*line_ptr != '\0' && (unsigned char)*line_ptr <= ' ')
|
|
||||||
line_ptr++;
|
|
||||||
return *line_ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_all_unchanged(void)
|
set_all_unchanged(void)
|
||||||
{
|
{
|
||||||
@ -680,6 +660,25 @@ write_part_table_flag(char *b)
|
|||||||
b[511] = 0xaa;
|
b[511] = 0xaa;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Read line; return 0 or first printable non-space char */
|
||||||
|
static int
|
||||||
|
read_line(const char *prompt)
|
||||||
|
{
|
||||||
|
int sz;
|
||||||
|
|
||||||
|
sz = read_line_input(NULL, prompt, line_buffer, sizeof(line_buffer));
|
||||||
|
if (sz <= 0)
|
||||||
|
exit(EXIT_SUCCESS); /* Ctrl-D or Ctrl-C */
|
||||||
|
|
||||||
|
if (line_buffer[sz-1] == '\n')
|
||||||
|
line_buffer[--sz] = '\0';
|
||||||
|
|
||||||
|
line_ptr = line_buffer;
|
||||||
|
while (*line_ptr != '\0' && (unsigned char)*line_ptr <= ' ')
|
||||||
|
line_ptr++;
|
||||||
|
return *line_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
static char
|
static char
|
||||||
read_nonempty(const char *mesg)
|
read_nonempty(const char *mesg)
|
||||||
{
|
{
|
||||||
@ -1614,7 +1613,7 @@ read_int(sector_t low, sector_t dflt, sector_t high, sector_t base, const char *
|
|||||||
|
|
||||||
if (*line_ptr == '+' || *line_ptr == '-') {
|
if (*line_ptr == '+' || *line_ptr == '-') {
|
||||||
int minus = (*line_ptr == '-');
|
int minus = (*line_ptr == '-');
|
||||||
int absolute = 0;
|
unsigned scale_shift;
|
||||||
|
|
||||||
if (sizeof(value) <= sizeof(long))
|
if (sizeof(value) <= sizeof(long))
|
||||||
value = strtoul(line_ptr + 1, NULL, 10);
|
value = strtoul(line_ptr + 1, NULL, 10);
|
||||||
@ -1622,48 +1621,46 @@ read_int(sector_t low, sector_t dflt, sector_t high, sector_t base, const char *
|
|||||||
value = strtoull(line_ptr + 1, NULL, 10);
|
value = strtoull(line_ptr + 1, NULL, 10);
|
||||||
|
|
||||||
/* (1) if 2nd char is digit, use_default = 0.
|
/* (1) if 2nd char is digit, use_default = 0.
|
||||||
* (2) move line_ptr to first non-digit. */
|
* (2) move line_ptr to first non-digit.
|
||||||
|
*/
|
||||||
while (isdigit(*++line_ptr))
|
while (isdigit(*++line_ptr))
|
||||||
use_default = 0;
|
use_default = 0;
|
||||||
|
|
||||||
switch (*line_ptr) {
|
scale_shift = 0;
|
||||||
case 'c':
|
switch (*line_ptr | 0x20) {
|
||||||
case 'C':
|
|
||||||
if (!display_in_cyl_units)
|
|
||||||
value *= g_heads * g_sectors;
|
|
||||||
break;
|
|
||||||
case 'K':
|
|
||||||
absolute = 1024;
|
|
||||||
break;
|
|
||||||
case 'k':
|
case 'k':
|
||||||
absolute = 1000;
|
scale_shift = 10; /* 1024 */
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
case 'M':
|
scale_shift = 20; /* 1024*1024 */
|
||||||
absolute = 1000000;
|
|
||||||
break;
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
case 'G':
|
scale_shift = 30; /* 1024*1024*1024 */
|
||||||
absolute = 1000000000;
|
break;
|
||||||
|
case 't':
|
||||||
|
scale_shift = 40; /* 1024*1024*1024*1024 */
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (absolute) {
|
if (scale_shift) {
|
||||||
ullong bytes;
|
ullong bytes;
|
||||||
unsigned long unit;
|
unsigned long unit;
|
||||||
|
|
||||||
bytes = (ullong) value * absolute;
|
bytes = (ullong) value << scale_shift;
|
||||||
unit = sector_size * units_per_sector;
|
unit = sector_size * units_per_sector;
|
||||||
bytes += unit/2; /* round */
|
bytes += unit/2; /* round */
|
||||||
bytes /= unit;
|
bytes /= unit;
|
||||||
value = bytes;
|
value = (bytes != 0 ? bytes - 1 : 0);
|
||||||
}
|
}
|
||||||
if (minus)
|
if (minus)
|
||||||
value = -value;
|
value = -value;
|
||||||
value += base;
|
value += base;
|
||||||
} else {
|
} else {
|
||||||
value = atoi(line_ptr);
|
if (sizeof(value) <= sizeof(long))
|
||||||
|
value = strtoul(line_ptr, NULL, 10);
|
||||||
|
else
|
||||||
|
value = strtoull(line_ptr, NULL, 10);
|
||||||
while (isdigit(*line_ptr)) {
|
while (isdigit(*line_ptr)) {
|
||||||
line_ptr++;
|
line_ptr++;
|
||||||
use_default = 0;
|
use_default = 0;
|
||||||
@ -2529,8 +2526,9 @@ add_partition(int n, int sys)
|
|||||||
stop = limit;
|
stop = limit;
|
||||||
} else {
|
} else {
|
||||||
snprintf(mesg, sizeof(mesg),
|
snprintf(mesg, sizeof(mesg),
|
||||||
"Last %s or +size or +sizeM or +sizeK",
|
"Last %s or +size{,K,M,G,T}",
|
||||||
str_units(SINGULAR));
|
str_units(SINGULAR)
|
||||||
|
);
|
||||||
stop = read_int(cround(start), cround(limit), cround(limit), cround(start), mesg);
|
stop = read_int(cround(start), cround(limit), cround(limit), cround(start), mesg);
|
||||||
if (display_in_cyl_units) {
|
if (display_in_cyl_units) {
|
||||||
stop = stop * units_per_sector - 1;
|
stop = stop * units_per_sector - 1;
|
||||||
@ -2614,9 +2612,9 @@ new_partition(void)
|
|||||||
} else {
|
} else {
|
||||||
char c, line[80];
|
char c, line[80];
|
||||||
snprintf(line, sizeof(line),
|
snprintf(line, sizeof(line),
|
||||||
"Command action\n"
|
"Partition type\n"
|
||||||
" %s\n"
|
" p primary partition (1-4)\n"
|
||||||
" p primary partition (1-4)\n",
|
" %s\n",
|
||||||
(extended_offset ?
|
(extended_offset ?
|
||||||
"l logical (5 or over)" : "e extended"));
|
"l logical (5 or over)" : "e extended"));
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -623,7 +623,7 @@ sgi_change_sysid(int i, int sys)
|
|||||||
"retrieve from its directory standalone tools like sash and fx.\n"
|
"retrieve from its directory standalone tools like sash and fx.\n"
|
||||||
"Only the \"SGI volume\" entire disk section may violate this.\n"
|
"Only the \"SGI volume\" entire disk section may violate this.\n"
|
||||||
"Type YES if you are sure about tagging this partition differently.\n");
|
"Type YES if you are sure about tagging this partition differently.\n");
|
||||||
if (strcmp(line_ptr, "YES\n") != 0)
|
if (strcmp(line_ptr, "YES") != 0)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sgilabel->partitions[i].id = SGI_SSWAP32(sys);
|
sgilabel->partitions[i].id = SGI_SSWAP32(sys);
|
||||||
|
@ -606,7 +606,7 @@ sun_change_sysid(int i, int sys)
|
|||||||
"there may destroy your partition table and bootblock.\n"
|
"there may destroy your partition table and bootblock.\n"
|
||||||
"Type YES if you're very sure you would like that partition\n"
|
"Type YES if you're very sure you would like that partition\n"
|
||||||
"tagged with 82 (Linux swap): ");
|
"tagged with 82 (Linux swap): ");
|
||||||
if (strcmp(line_ptr, "YES\n"))
|
if (strcmp(line_ptr, "YES") != 0)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (sys) {
|
switch (sys) {
|
||||||
|
Loading…
Reference in New Issue
Block a user