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 21344 invoked from network); 21 Aug 2021 18:15:58 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 21 Aug 2021 18:15:58 -0000 Received: (qmail 1246 invoked by uid 550); 21 Aug 2021 18:15:52 -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 15597 invoked from network); 21 Aug 2021 08:54:38 -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=fm3; bh=we7+KBm8JSqQ8 xlSwhXt7r274ayp7bjZzV2uG2aXvIg=; b=zDOopdn/VF/yYmQ25TZXXhS4KI0Tr dpyAw93icPScL0eUVK7ghzNxzzcPyJOzJ/++RTpikWqT4M26KDFViF3oHJv+qwXx mYhJHOiIae5HdmRTduqx5165bSaUOJIXtq+WmdOoXRnthWO5v/v703BMBX3C2VhL 9ZwhkFBGzm9Z+sNObU8cyPbzwm1JnpOY4TDukh5j6R51pnShHX87JsIyU7kHW60x bKRfvCP4+PVkbNqvCUHvtNilfuBlZesjHpOE+7xSNF02zUxOKg/2w/Hvir+g8aA9 HMWjLsLLaaPCoBmFOBLGhjl2G/x3iVVdlhWNHuJchv0+pU6zA4YeLOQXQ== 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=we7+KBm8JSqQ8xlSwhXt7r274ayp7bjZzV2uG2aXvIg=; b=AqANBI56 HI+57kT9m3FmrlJzCSDdStrGQ1HZE65qyq5rNbMpgw6t0GFwKIau9vqupmAmz4mD SJsXO3KYrBDBWgwtr4839kfyY2lETqs0OuhDyIHDeYxC+ivH9i+1JBqDnq4ZmWu4 2R7LM0EJZ461xLhX8niYqpxkJGz8oKkok1njVPDZesinxfyanAkaUzyVt6rKJxJe GWTRevVZkIMEOZOUl76cGp6NGjxjkO2Tt/yL30uPo1h4fwkDaBAPgO/iIsW+f/XP PvRFREcQt8qf6mSGt29gfXsF5tKEOlylXVeCaBJ5XjmlKwNeIKnZ/9uDM8ZkizW9 vS6QKUaDXcouQQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddruddtuddgtdelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkofgjfhgggfestdekre dtredttdenucfhrhhomheptehlhihsshgrucftohhsshcuoehhihesrghlhihsshgrrdhi sheqnecuggftrfgrthhtvghrnhepgfefudekvdelieelledufeevheeglefggedvudejvd dtffeuueevffehleejkedvnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehm rghilhhfrhhomhepqhihlhhishhssegvvhgvrdhqhihlihhsshdrnhgvth X-ME-Proxy: From: Alyssa Ross To: musl@lists.openwall.com Cc: Alyssa Ross Date: Sat, 21 Aug 2021 08:54:18 +0000 Message-Id: <20210821085420.474615-2-hi@alyssa.is> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210821085420.474615-1-hi@alyssa.is> References: <20210821085420.474615-1-hi@alyssa.is> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [musl] [PATCH libc-test 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