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@xxxxxxxxxxxxxxxxxxx> --- fdisk/sfdisk.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/fdisk/sfdisk.c b/fdisk/sfdisk.c index 6432b25..fd2f27e 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; -- 1.7.0.4
Attachment:
signature.asc
Description: Digital signature