]> err.no Git - util-linux/commitdiff
sfdisk: save errno before calling perror
authorForest Bond <forest@alittletooquiet.net>
Tue, 5 Oct 2010 01:01:30 +0000 (21:01 -0400)
committerKarel Zak <kzak@redhat.com>
Thu, 7 Oct 2010 08:22:02 +0000 (10:22 +0200)
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>
fdisk/sfdisk.c

index 6432b25c05b08f7a3f7bac1187c11ce48193936d..fd2f27eb133c93ab50d915c7b7bb07f1b852383d 100644 (file)
@@ -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;