From nobody Tue Apr 16 08:14:41 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1539875655975907.0251353286774; Thu, 18 Oct 2018 08:14:15 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 242F5753B1; Thu, 18 Oct 2018 15:14:14 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D8D2C611C9; Thu, 18 Oct 2018 15:14:13 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 66CE4180B5B7; Thu, 18 Oct 2018 15:14:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w9IFCeHi018541 for ; Thu, 18 Oct 2018 11:12:40 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5503A85577; Thu, 18 Oct 2018 15:12:40 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id CFC948EF03 for ; Thu, 18 Oct 2018 15:12:36 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 18 Oct 2018 17:12:33 +0200 Message-Id: <3a2b5abade4864f0384e63f742dfa8c442e1ebb0.1539875553.git.mprivozn@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH] virFileInData: Preserve errno on error X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Thu, 18 Oct 2018 15:14:14 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The virFileInData() function should return to the caller if the current position the passed file is in is a data section or a hole (and also how long the current section is). At any rate, upon return from this function (be it successful or not) the original position in the file is restored. This may mess up with errno which might have been set earlier. Save the errno into a local variable so it can be restored for the caller's sake. Signed-off-by: Michal Privoznik Reviewed-by: Erik Skultety Reviewed-by: Martin Kletzander --- src/util/virfile.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/util/virfile.c b/src/util/virfile.c index e09992e41a..f6f01ec1e1 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -4072,11 +4072,18 @@ virFileInData(int fd, ret =3D 0; cleanup: /* At any rate, reposition back to where we started. */ - if (cur !=3D (off_t) -1 && - lseek(fd, cur, SEEK_SET) =3D=3D (off_t) -1) { - virReportSystemError(errno, "%s", - _("unable to restore position in file")); - ret =3D -1; + if (cur !=3D (off_t) -1) { + int theerrno =3D errno; + + if (lseek(fd, cur, SEEK_SET) =3D=3D (off_t) -1) { + virReportSystemError(errno, "%s", + _("unable to restore position in file")); + ret =3D -1; + if (theerrno =3D=3D 0) + theerrno =3D errno; + } + + errno =3D theerrno; } return ret; } --=20 2.18.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list