From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 31714 invoked from network); 15 Sep 2021 23:39:04 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 15 Sep 2021 23:39:04 -0000 Received: (qmail 19984 invoked by uid 550); 15 Sep 2021 23:38:57 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 20322 invoked from network); 15 Sep 2021 22:12:20 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alyssa.is; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm1; bh=aX6I8tzc5TBLn wbsZUYx3Vz2Qg/pHkoRXpZG3d3Nw3g=; b=s4j+34PH+KDEpEkdG74nRYuWBxC7T cYpwdVLj+IW1/22PJCZV2Cd6ZiNS9LZzK0f2VPm3HSs2/lMD2MvH3p2/o0t9S7Hh F1m2CSgO04GJY7vrDaSHIsJRCnH6+UXaXE6/q1CUrrcVY2LfNeEyap/5u7H0XmDz FH5GQ9MnMo7tAIyp1HtQuHj7fwRYpeWs3cOZW6VBbw7HHJbw/kYgRy0/WnJdheQt O1hHm4JAZ1pzI4JDcvOxKr7aZ3aau0yPu66AiiLd/SM+BQLhnAapayYiOUAbWnLY gkD0+A65PjeSOIRUDtXbpMX9oHDmHvJor7UipMdzz7f6797zEL0orj0tg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=aX6I8tzc5TBLnwbsZUYx3Vz2Qg/pHkoRXpZG3d3Nw3g=; b=ew4D6mGm mWA17o2FzlEbfd0mSnW9S4sbHwwZoHAexWrW8fcMW74/9qCf6feV+7yXTbXiyOAa kN5obHnFwEXJ7n+RermNJ/1YXrl29RjkTEoiuPbjtmSzbKmtrLUaEC/zGcpoV9rl eLpR5JZvnUa20rD4dtCBOq9Owv+xuCmfgkDiuD0BWGX4iJNda84PAlWCv6r9ZUIG 2T65TDGapwZUTYK8vqy4tqzppVqb1Em1NyTKAXuMAMAMrFTWIcFuFkgkFdZDk0jZ /CQE+dvNW6Zqt6GmAxouZZx23PamMIANEPwBFRFfPhugEzj/4G64DthJgGxUsXEV +tdX8k+5phSnrw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrudehfedgtdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkofgjfhgggfestdekre dtredttdenucfhrhhomheptehlhihsshgrucftohhsshcuoehhihesrghlhihsshgrrdhi sheqnecuggftrfgrthhtvghrnhepgfefudekvdelieelledufeevheeglefggedvudejvd dtffeuueevffehleejkedvnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehm rghilhhfrhhomhepqhihlhhishhsseigvddvtddrqhihlhhishhsrdhnvght X-ME-Proxy: From: Alyssa Ross To: musl@lists.openwall.com Cc: =?UTF-8?q?=C3=89rico=20Nogueira?= , Rich Felker Date: Wed, 15 Sep 2021 22:11:53 +0000 Message-Id: <20210915221155.3977763-2-hi@alyssa.is> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210915221155.3977763-1-hi@alyssa.is> References: <20210915221155.3977763-1-hi@alyssa.is> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [musl] [PATCH libc-test v2 1/3] functional: add mntent test This only checks reading an fstab from an stream. I haven't written tests for either setmntent(), addmntent(), or hasmntnent(). test_getmntent exposes a bug in Musl where lines omitting the final two fields, which are supposed to be optional according to fstab(5), are not accepted. The tests all pass on Glibc. --- AUTHORS | 1 + src/functional/mntent.c | 76 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/functional/mntent.c diff --git a/AUTHORS b/AUTHORS index ff99471..cf2a394 100644 --- a/AUTHORS +++ b/AUTHORS @@ -5,3 +5,4 @@ John Spencer Jens Gustedt Alexander Monakov Julien Ramseier +Alyssa Ross diff --git a/src/functional/mntent.c b/src/functional/mntent.c new file mode 100644 index 0000000..59d816a --- /dev/null +++ b/src/functional/mntent.c @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: MIT + +#define _DEFAULT_SOURCE // for getmntent_r + +#include +#include +#include +#include +#include + +#include "test.h" + +#define ASSERT(x) do { \ + if (!(x)) { \ + t_error(#x " failed\n"); \ + exit(EXIT_FAILURE); \ + } \ + } while (0); + +#define ERR(fmt, ...) do { \ + t_error(fmt ": %s\n", ##__VA_ARGS__, strerror(errno)); \ + exit(EXIT_FAILURE); \ + } while (0) + +void test_getmntent_empty(void) +{ + char fstab[] = "\n"; + FILE *f = fmemopen((void *)fstab, sizeof fstab - 1, "r"); + if (!f) ERR("fmemopen"); + ASSERT(!getmntent(f)); + ASSERT(endmntent(f) == 1); +} + +void test_getmntent(void) +{ + // Checks that the fifth and sixth fields default to 0. + char fstab[] = "none /proc proc defaults\n"; + FILE *f = fmemopen((void *)fstab, sizeof fstab - 1, "r"); + if (!f) ERR("fmemopen"); + struct mntent *m = getmntent(f); + ASSERT(m); + ASSERT(!strcmp(m->mnt_fsname, "none")); + ASSERT(!strcmp(m->mnt_dir, "/proc")); + ASSERT(!strcmp(m->mnt_type, "proc")); + ASSERT(!strcmp(m->mnt_opts, "defaults")); + ASSERT(m->mnt_freq == 0); + ASSERT(m->mnt_passno == 0); + ASSERT(endmntent(f) == 1); +} + +void test_getmntent_r(void) +{ + struct mntent m, *r; + char fstab[] = "/dev/sda\t/\text4\trw,nosuid\t2\t1\n"; + char buf[sizeof(fstab)]; + + FILE *f = fmemopen((void *)fstab, sizeof fstab - 1, "r"); + if (!f) ERR("fmemopen"); + + r = getmntent_r(f, &m, buf, sizeof buf); + ASSERT(r == &m); + ASSERT(!strcmp(m.mnt_fsname, "/dev/sda")); + ASSERT(!strcmp(m.mnt_dir, "/")); + ASSERT(!strcmp(m.mnt_type, "ext4")); + ASSERT(!strcmp(m.mnt_opts, "rw,nosuid")); + ASSERT(m.mnt_freq == 2); + ASSERT(m.mnt_passno == 1); + ASSERT(endmntent(f) == 1); +} + +int main(void) +{ + test_getmntent_empty(); + test_getmntent(); + test_getmntent_r(); +} -- 2.32.0