From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 4749BA0450 for ; Tue, 13 Jun 2023 07:19:48 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1F28D298FB for ; Tue, 13 Jun 2023 07:19:18 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Tue, 13 Jun 2023 07:19:17 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id AFFAE444DD for ; Tue, 13 Jun 2023 07:19:16 +0200 (CEST) From: Thomas Lamprecht To: pve-devel@lists.proxmox.com Date: Tue, 13 Jun 2023 07:19:10 +0200 Message-Id: <20230613051910.389499-1-t.lamprecht@proxmox.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.082 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] appllied: [PATCH] read firstline: only map ENOENT to undef, raise error otherwise X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Jun 2023 05:19:48 -0000 Errors like permission denied or I/O ones should bubble up, otherwise it might hide serious issues and seemingly continue to work, with a wrong state or the like. One could argue that the case for not existent should return undef, while an empty file should return an empty string, but for that we might want to check all use-sites first. Signed-off-by: Thomas Lamprecht --- src/PVE/Tools.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm index 174ded8..2d728f8 100644 --- a/src/PVE/Tools.pm +++ b/src/PVE/Tools.pm @@ -291,7 +291,10 @@ sub file_read_firstline { my ($filename) = @_; my $fh = IO::File->new ($filename, "r"); - return undef if !$fh; + if (!$fh) { + return undef if $! == POSIX::ENOENT; + die "file '$filename' exists but open for reading failed - $!\n"; + } my $res = <$fh>; chomp $res if $res; $fh->close; -- 2.39.2