From nobody Thu Jan 27 23:13:21 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 21133197C150; Thu, 27 Jan 2022 23:13:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JlGbk0KGSz4Wpt; Thu, 27 Jan 2022 23:13:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643325202; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XBQJ6K40Jrs5voHqztqOsTkCMw3mLHYfUwkJOl+2DqQ=; b=Lxv7E6NEpE681SStuqLDnnaco8kGP9FO6zEdx5t25y2DvpGjnFxBOG2idtrr7u6+X15aGz QA1WxELWts0X5Nf+jGfG1yKFT6S/w4RVAZjMLM3eLYjIGL3mZHXD8VsVV56WGElqL3hOIf ipdavkVdeYp/nN6R6TCXAoulXAuqF2P9Tw6o5VCum+uWqmpUrXhX7n0VS8zxLiMr2nQGoN yXzX1bD3CnKX4JZCiBW/Uf7tB1gwxXfeKZYvE/KHUqWpLWqnIbBxuz1wEf1w3ao/fPhnbW YmxcD4KFmL8xuW1s8/7ps0PuaAZa+2lKaSqzYkDQdo/U50jy9fJYPFzb7QQoYQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DEE5A1F90E; Thu, 27 Jan 2022 23:13:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 20RNDL68052133; Thu, 27 Jan 2022 23:13:21 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 20RNDL0W052132; Thu, 27 Jan 2022 23:13:21 GMT (envelope-from git) Date: Thu, 27 Jan 2022 23:13:21 GMT Message-Id: <202201272313.20RNDL0W052132@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 72d5dedfa69f - main - stdio: add test for 86a16ada1ea608408cec370: fflush() handling of errors List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 72d5dedfa69fa74801d19dd17c49867882d73d97 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643325202; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XBQJ6K40Jrs5voHqztqOsTkCMw3mLHYfUwkJOl+2DqQ=; b=CpeDbxR8lpgX3IjmuPSABZzfKgqMvqxaQ+G4fVCemnQcKi3tcesbpkb59lzi7kDRA/yrzG sSDfSRLr3A3yNa4CTIF0IAO4K+ACrZCuwkyree04rQcN6ZJzXh52MlLT9zx2wBHzILeXMD HwXMK+hxJALU63V8sqVDnt85T1NOx2ia+qZeKDLbuZxmL+4ceQ1Sbz8bNE99XCBwsjI0G3 SjMbx9MhUSJDJl9lh/kw9IA/0Oii9QpLQYFWajLvU7A0olaj7qsPCFwhGAYefQ16fc5msG O1V8FKuj/scd9c/4lzMbxdtmL4LTc+aOiz5jlNXfhoqfzewW0r2BIxuSIVQDaw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1643325202; a=rsa-sha256; cv=none; b=waFXrMJXULFTgwtC2lo994CHaNb3imDnqUJTCCzWuEWt7JJrfWUhzkKiRwsfqXFRIFIgzS UNZctF4A/VpjXwR4DKJsvOb7GMfojrE+4hvKAFCflR06ovjTiUGxiVtwLAEZhRuXLhBYkP u3kDXTgeYulq6S5Z05v/5b9VKSKz/KZiXpMayJQDDn4pRUMygSh3sNX7CzTHvhsK6xA1p0 rn5zia9Fy5mftFoxhsgWv07dOyUiSVSHtqvevEQRatZeQmupdJNl6AY5x8h5OYayGFeM3W gd8GEtSO0jQqe/Os0VCXt3DOR/3VhnOgKoYDAaJ1Hfzi9W+57fUnXGuyI1Iyqw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=72d5dedfa69fa74801d19dd17c49867882d73d97 commit 72d5dedfa69fa74801d19dd17c49867882d73d97 Author: Konstantin Belousov AuthorDate: 2022-01-25 21:56:08 +0000 Commit: Konstantin Belousov CommitDate: 2022-01-27 23:09:47 +0000 stdio: add test for 86a16ada1ea608408cec370: fflush() handling of errors PR: 76398 Reviewed by: emaste, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D34044 --- lib/libc/tests/stdio/Makefile | 2 + lib/libc/tests/stdio/eintr_test.c | 143 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) diff --git a/lib/libc/tests/stdio/Makefile b/lib/libc/tests/stdio/Makefile index 248a05bc45e7..792375ba17b8 100644 --- a/lib/libc/tests/stdio/Makefile +++ b/lib/libc/tests/stdio/Makefile @@ -2,6 +2,7 @@ .include +ATF_TESTS_C+= eintr_test ATF_TESTS_C+= fdopen_test ATF_TESTS_C+= fmemopen2_test ATF_TESTS_C+= fopen2_test @@ -30,6 +31,7 @@ NETBSD_ATF_TESTS_C+= popen_test NETBSD_ATF_TESTS_C+= printf_test NETBSD_ATF_TESTS_C+= scanf_test +LIBADD.eintr_test+= md LIBADD.printfloat_test+= m LIBADD.scanfloat_test+= m diff --git a/lib/libc/tests/stdio/eintr_test.c b/lib/libc/tests/stdio/eintr_test.c new file mode 100644 index 000000000000..55354c8926c5 --- /dev/null +++ b/lib/libc/tests/stdio/eintr_test.c @@ -0,0 +1,143 @@ +/* + * Initially written by Yar Tikhiy in PR 76398. + * Bug fixes and instrumentation by kib@freebsd.org. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define NDATA 1000 +#define DELAY 2 + +static void +hup(int signo __unused) +{ +} + +static int ndata, seq; + +static void +setdata(int n) +{ + ndata = n; + seq = 0; +} + +static char * +getdata(void) +{ + static char databuf[256]; + static char xeof[] = "#"; + + if (seq > ndata) + return (NULL); + if (seq == ndata) { + seq++; + return (xeof); + } + sprintf(databuf, "%08d xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n", seq++); + return (databuf); +} + +ATF_TC_WITHOUT_HEAD(eintr_test); +ATF_TC_BODY(eintr_test, tc) +{ + char c, digest0[33], digest[33], *p; + FILE *fp; + int i, s[2], total0, total; + MD5_CTX md5; + pid_t child; + struct sigaction sa; + + MD5Init(&md5); + setdata(NDATA); + for (total0 = 0; (p = getdata()) != NULL; total0 += strlen(p)) + MD5Update(&md5, p, strlen(p)); + p = MD5End(&md5, digest0); + + sa.sa_handler = hup; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + ATF_REQUIRE(sigaction(SIGHUP, &sa, NULL) == 0); + + ATF_REQUIRE(socketpair(PF_UNIX, SOCK_STREAM, 0, s) == 0); + + switch (child = fork()) { + case -1: + atf_tc_fail("fork failed %s", strerror(errno)); + break; + + case 0: + ATF_REQUIRE((fp = fdopen(s[0], "w")) != NULL); + close(s[1]); + setdata(NDATA); + while ((p = getdata())) { + for (; *p;) { + if (fputc(*p, fp) == EOF) { + if (errno == EINTR) { + clearerr(fp); + } else { + atf_tc_fail("fputc errno %s", + strerror(errno)); + } + } else { + p++; + } + } + } + fclose(fp); + break; + + default: + close(s[0]); + ATF_REQUIRE((fp = fdopen(s[1], "r")) != NULL); + sleep(DELAY); + ATF_REQUIRE(kill(child, SIGHUP) != -1); + sleep(DELAY); + MD5Init(&md5); + for (total = 0;;) { + i = fgetc(fp); + if (i == EOF) { + if (errno == EINTR) { + clearerr(fp); + } else { + atf_tc_fail("fgetc errno %s", + strerror(errno)); + } + continue; + } + total++; + c = i; + MD5Update(&md5, &c, 1); + if (i == '#') + break; + } + MD5End(&md5, digest); + fclose(fp); + ATF_REQUIRE_MSG(total == total0, + "Total number of bytes read does not match: %d %d", + total, total0); + ATF_REQUIRE_MSG(strcmp(digest, digest0) == 0, + "Digests do not match %s %s", digest, digest0); + break; + } +} + +ATF_TP_ADD_TCS(tp) +{ + ATF_TP_ADD_TC(tp, eintr_test); + return (atf_no_error()); +}