Make sfdisk(8) return non-zero value on failed BLKRRPART ioctl().
This will happen for either partition table re-reads after partition
changes or on explicit use of -R switch.
The function reread_disk_partition() was changed from 'void' to 'int'
and now returns a result to let the calling functions decide to exit(1).
Signed-off-by: Andrea Galbusera <gizero@gmail.com>
To avoid a conflict with the warn function from err.h, renamed warn to
my_warn, as the functionality of both is not the same.
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Based on patch from Alex Bligh <alex@alex.org.uk>, Alex wrote:
By default, omitting a size parameter means that the maximum sized partition
is used. However, this option is not available in conjunction with the -N
flag, as under such circumstances the default is the current size of the
partition. This patch allows a size to be specified as "+" in which case
the maximum sized partition is used, irrespective of the setting of the -N
flag.
This allows partitions to be programatically resized to their maximum size,
by (for instance):
echo ",+," | sfdisk -N1 /dev/sda
This is non-trivial to do without the patch, as -N makes the default size
the existing size. As there is (without this patch) no way of reading the
maximum size, the only option is to delete the partition and recreate it.
This is undesirable for a number of reasons (e.g. errors between delete
and recreate).
Addresses: https://bugs.launchpad.net/ubuntu/+source/util-linux/+bug/686124
Signed-off-by: Karel Zak <kzak@redhat.com>
errno is saved into a local variable to avoid it getting trampled
by perror before it is checked to determine the return value.
This issue seems quite rare, but I have seen it when running sfdisk
via gksudo and using the --quiet command-line option. From what I
can tell, this combination triggers loading of translations in perror,
which (at least on my machine) ends up changing the value of errno.
Signed-off-by: Forest Bond <forest@alittletooquiet.net>
The size of disk in the sfdisk command is based on number of cylinders
(this is probably legacy from CHS epoch). That's wrong because
partitions are addressed in sectors (LBA), so cylinders don't provide
necessary resolution (granularity).
On Sat, Jan 02, 2010 at 01:01:16PM +0100, Giulio wrote:
> $ cat /sys/block/sda/size
> 184549376
>
> $ sfdisk -d /dev/sda > part.dump
> $ cat part.dump
> # partition table of /dev/sda
> unit: sectors
>
> /dev/sda1 : start= 2048, size= 2097152, Id=83
> /dev/sda2 : start= 2099200, size= 12582912, Id=83
> /dev/sda3 : start= 14682112, size= 84934656, Id=83
> /dev/sda4 : start= 99616768, size= 84932608, Id=83
>
>
> $ sfdisk -L /dev/sda < part.dump
> Checking that no-one is using this disk right now ...
> OK
>
> Disk /dev/sda: 11487 cylinders, 255 heads, 63 sectors/track
> Old situation:
> Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
>
> Device Boot Start End #cyls #blocks Id System
> /dev/sda1 0+ 130- 131- 1048576 83 Linux
> /dev/sda2 130+ 913- 784- 6291456 83 Linux
> /dev/sda3 913+ 6200- 5287- 42467328 83 Linux
> /dev/sda4 6200+ 11487- 5287- 42466304 83 Linux
> Warning: given size (84932608) exceeds max allowable size (84921887)
disk size:
based on number of cylinders: 11487 * 8225280 = 94483791360 bytes
based on number of sectors: 184549376 * 512 = 94489280512 bytes
end of 4th partition (LBA in bytes):
(99616768 + 84932608) * 512 = 94489280512
Reported-by: Giulio <giulioo@gmail.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
This stupid bug has been introduced by:
commit add5133f4a
Author: Pedro Ribeiro <p.m42.ribeiro@gmail.com>
Date: Fri Oct 3 08:52:35 2008 +0200
fdisk: several strings without gettext calls
... so it shows that we need to improve our review process... :-(
Address-Red-Hat-Bug: #522718
Signed-off-by: Karel Zak <kzak@redhat.com>
Those 4 functions are marked as LEGACY in POSIX.1-2001 and removed in
POSIX.1-2008.
Replaced with memmove,memset,strchr and strrchr.
Signed-off-by: Daniel Mierswa <impulze@impulze.org>
BLK* and HDIO_* are not available on all platform. Work around this
in a few places.
[kzak@redhat.com: split the original patch to small patches]
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: Karel Zak <kzak@redhat.com>
The get_linux_version() function is Linux-specific.
Work around it in a few places.
[kzak@redhat.com: split the original patch to small patches]
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: Karel Zak <kzak@redhat.com>
sfdisk would incorrectly complain that there was no room when partitioning
a drive over 2^31 sectors in size.
Signed-off-by: LaMont Jones <lamont@mmjgroup.com>
Fix strict gcc warnings that come from using:
("-Wall -Wp,-D_FORTIFY_SOURCE=2")
83 warnings fixed:
sfdisk.c:249: warning: pointer targets in initialization differ in signedness
sfdisk.c:376: warning: pointer targets in passing argument 1 of 'chars_to_ulong' differ in signedness
sfdisk.c:702: warning: pointer targets in passing argument 1 of 'copy_to_int' differ in signedness
sfdisk.c:703: warning: pointer targets in passing argument 1 of 'copy_to_int' differ in signedness
sfdisk.c:1709: warning: pointer targets in passing argument 1 of 'fgets' differ in signedness
sfdisk.c:1709: warning: pointer targets in assignment differ in signedness
sfdisk.c:1714: warning: pointer targets in passing argument 1 of 'index' differ in signedness
sfdisk.c:1714: warning: pointer targets in assignment differ in signedness
sfdisk.c:1719: warning: pointer targets in passing argument 1 of 'index' differ in signedness
sfdisk.c:1719: warning: pointer targets in assignment differ in signedness
sfdisk.c:1723: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:1723: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:1723: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:1723: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:1723: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:1723: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:1729: warning: pointer targets in passing argument 1 of 'index' differ in signedness
sfdisk.c:1729: warning: pointer targets in assignment differ in signedness
sfdisk.c:1739: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:1739: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:1739: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:1739: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:1739: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:1739: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:1739: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:1739: warning: pointer targets in passing argument 1 of 'strncmp' differ in signedness
sfdisk.c:2021: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2021: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2021: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2021: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2021: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2021: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2059: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2059: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2059: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2059: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2059: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2059: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2061: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2061: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2061: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2061: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2061: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2061: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2063: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2063: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2063: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2063: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2063: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2063: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2065: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2065: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2065: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2065: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2065: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2065: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2067: warning: pointer targets in passing argument 1 of 'get_ul' differ in signedness
sfdisk.c:2083: warning: pointer targets in passing argument 1 of 'get_ul' differ in signedness
sfdisk.c:2096: warning: pointer targets in passing argument 1 of 'get_ul' differ in signedness
sfdisk.c:2130: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2130: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2130: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2130: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2130: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2130: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2132: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
sfdisk.c:2154: warning: pointer targets in passing argument 1 of 'get_ul' differ in signedness
sfdisk.c:2155: warning: pointer targets in passing argument 1 of 'get_ul' differ in signedness
sfdisk.c:2156: warning: pointer targets in passing argument 1 of 'get_ul' differ in signedness
sfdisk.c:2167: warning: pointer targets in passing argument 1 of 'get_ul' differ in signedness
sfdisk.c:2168: warning: pointer targets in passing argument 1 of 'get_ul' differ in signedness
sfdisk.c:2169: warning: pointer targets in passing argument 1 of 'get_ul' differ in signedness
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
The cfdisk and fdisk set defaults for heads and sectors in order to handle a
situation when the get_geometry() ends up with zeroes for the disk geometry for
device-mapper devices. This patch add same functionally to sfdisk.
You know that a dmsetup setgeometry of the the dm device can be used to
circumvent the issue but users may not immediately realize they need to do
that.
The GPT (GUID Partition Table) is unsupported by fdisk, sfdisk and
cfdisk. Unfortunately, the fdisk doesn't complain about GPT.. that's
dangerous, because user is able to blindly edit PT with unexpected
results.
Signed-off-by: Karel Zak <kzak@redhat.com>
The full disk (e.g. /dev/hda) detection code is duplicated on two places and
the code doesn't work correctly with devices which don't support HDIO_GETGEO.
Signed-off-by: Karel Zak <kzak@redhat.com>