On Mon, Oct 04, 2010 at 09:01:30PM -0400, Forest Bond wrote: >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> Yeah, perror() could change errno. Reviewed-by: WANG Cong <xiyou.wangcong@xxxxxxxxx> >--- > 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 -- To unsubscribe from this list: send the line "unsubscribe util-linux-ng" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html