From: Forest Bond Date: Tue, 5 Oct 2010 01:01:30 +0000 (-0400) Subject: sfdisk: save errno before calling perror X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=628e30197e106f0dea32aa01e9a43c4cab0b07fe;p=util-linux sfdisk: save errno before calling perror 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 --- diff --git a/fdisk/sfdisk.c b/fdisk/sfdisk.c index 6432b25c..fd2f27eb 100644 --- a/fdisk/sfdisk.c +++ b/fdisk/sfdisk.c @@ -784,10 +784,13 @@ reread_ioctl(int fd) { errno = ENOSYS; #endif { + /* perror might change errno */ + int err = errno; + perror("BLKRRPART"); /* 2.6.8 returns EIO for a zero table */ - if (errno == EBUSY) + if (err == EBUSY) return -1; } return 0;