From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x82c.google.com (mail-qt1-x82c.google.com [IPv6:2607:f8b0:4864:20::82c]) by sourceware.org (Postfix) with ESMTPS id 22AAB384A07D for ; Tue, 16 Feb 2021 13:43:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 22AAB384A07D Received: by mail-qt1-x82c.google.com with SMTP id b24so7003682qtp.13 for ; Tue, 16 Feb 2021 05:43:07 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:cc:references:from:autocrypt:subject :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=xskRuG49trjX8TvCC6wtfPiF5p6DRFtShta3DY6NHVY=; b=m+kY2e2n/1c3ehJV1IhoAqy7w2ant239LgLFPzc8PAMB68u6QgmX7pZDKfVKGRp15F 2dPWGv2j5IywCijltGSyjluTHRQEjAXUCtgM8mEWMrPj8w6erXsdUqkznwcWbKzQWz1W R8odwvm8oi6mCGK62DqMOLffJr1vuNLOrA7BWY7A1b9XBt0BFVzIcZid+sF2HkKu0/KX 1G1Z+CRuHl6PfAy9wIQ4XED5R5jhQz7gtmBqpQbqY5ujq7ET/IStKDCO6reYu6EBsbEx B82u1QIDVWOr9qhQr+0bUX1vT5Jf/NR0U+235rF5GHPCgKqgyvQ8K5wo3oAtXh1nGvXr 4ZpQ== X-Gm-Message-State: AOAM533apEkYwPnVGUXgwg4nqseLEfSpiNzhllFT+kn/c49MMnj9nCmw /6VQltgxCVZF5EFKrJzSWJBFPg== X-Google-Smtp-Source: ABdhPJw0YQHl0RoMpUyH38FmYcKYWjNk+aKqBNgC6jS2WkNitF15rn6LSUZDS6XqFjjzdQ4ElGUO9g== X-Received: by 2002:ac8:70cc:: with SMTP id g12mr11747717qtp.164.1613482986591; Tue, 16 Feb 2021 05:43:06 -0800 (PST) Received: from [192.168.1.4] ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id r2sm2570386qti.4.2021.02.16.05.43.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 16 Feb 2021 05:43:06 -0800 (PST) To: Lukasz Majewski , Joseph Myers , Florian Weimer Cc: Paul Eggert , Alistair Francis , Arnd Bergmann , Alistair Francis , GNU C Library , Carlos O'Donell , Florian Weimer , Zack Weinberg References: <20210210223533.17457-1-lukma@denx.de> From: Adhemerval Zanella Autocrypt: addr=adhemerval.zanella@linaro.org; prefer-encrypt=mutual; keydata= mQINBFcVGkoBEADiQU2x/cBBmAVf5C2d1xgz6zCnlCefbqaflUBw4hB/bEME40QsrVzWZ5Nq 8kxkEczZzAOKkkvv4pRVLlLn/zDtFXhlcvQRJ3yFMGqzBjofucOrmdYkOGo0uCaoJKPT186L NWp53SACXguFJpnw4ODI64ziInzXQs/rUJqrFoVIlrPDmNv/LUv1OVPKz20ETjgfpg8MNwG6 iMizMefCl+RbtXbIEZ3TE/IaDT/jcOirjv96lBKrc/pAL0h/O71Kwbbp43fimW80GhjiaN2y WGByepnkAVP7FyNarhdDpJhoDmUk9yfwNuIuESaCQtfd3vgKKuo6grcKZ8bHy7IXX1XJj2X/ BgRVhVgMHAnDPFIkXtP+SiarkUaLjGzCz7XkUn4XAGDskBNfbizFqYUQCaL2FdbW3DeZqNIa nSzKAZK7Dm9+0VVSRZXP89w71Y7JUV56xL/PlOE+YKKFdEw+gQjQi0e+DZILAtFjJLoCrkEX w4LluMhYX/X8XP6/C3xW0yOZhvHYyn72sV4yJ1uyc/qz3OY32CRy+bwPzAMAkhdwcORA3JPb kPTlimhQqVgvca8m+MQ/JFZ6D+K7QPyvEv7bQ7M+IzFmTkOCwCJ3xqOD6GjX3aphk8Sr0dq3 4Awlf5xFDAG8dn8Uuutb7naGBd/fEv6t8dfkNyzj6yvc4jpVxwARAQABtElBZGhlbWVydmFs IFphbmVsbGEgTmV0dG8gKExpbmFybyBWUE4gS2V5KSA8YWRoZW1lcnZhbC56YW5lbGxhQGxp bmFyby5vcmc+iQI3BBMBCAAhBQJXFRpKAhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJ EKqx7BSnlIjv0e8P/1YOYoNkvJ+AJcNUaM5a2SA9oAKjSJ/M/EN4Id5Ow41ZJS4lUA0apSXW NjQg3VeVc2RiHab2LIB4MxdJhaWTuzfLkYnBeoy4u6njYcaoSwf3g9dSsvsl3mhtuzm6aXFH /Qsauav77enJh99tI4T+58rp0EuLhDsQbnBic/ukYNv7sQV8dy9KxA54yLnYUFqH6pfH8Lly sTVAMyi5Fg5O5/hVV+Z0Kpr+ZocC1YFJkTsNLAW5EIYSP9ftniqaVsim7MNmodv/zqK0IyDB GLLH1kjhvb5+6ySGlWbMTomt/or/uvMgulz0bRS+LUyOmlfXDdT+t38VPKBBVwFMarNuREU2 69M3a3jdTfScboDd2ck1u7l+QbaGoHZQ8ZNUrzgObltjohiIsazqkgYDQzXIMrD9H19E+8fw kCNUlXxjEgH/Kg8DlpoYJXSJCX0fjMWfXywL6ZXc2xyG/hbl5hvsLNmqDpLpc1CfKcA0BkK+ k8R57fr91mTCppSwwKJYO9T+8J+o4ho/CJnK/jBy1pWKMYJPvvrpdBCWq3MfzVpXYdahRKHI ypk8m4QlRlbOXWJ3TDd/SKNfSSrWgwRSg7XCjSlR7PNzNFXTULLB34sZhjrN6Q8NQZsZnMNs TX8nlGOVrKolnQPjKCLwCyu8PhllU8OwbSMKskcD1PSkG6h3r0AquQINBFcVGkoBEACgAdbR Ck+fsfOVwT8zowMiL3l9a2DP3Eeak23ifdZG+8Avb/SImpv0UMSbRfnw/N81IWwlbjkjbGTu oT37iZHLRwYUFmA8fZX0wNDNKQUUTjN6XalJmvhdz9l71H3WnE0wneEM5ahu5V1L1utUWTyh VUwzX1lwJeV3vyrNgI1kYOaeuNVvq7npNR6t6XxEpqPsNc6O77I12XELic2+36YibyqlTJIQ V1SZEbIy26AbC2zH9WqaKyGyQnr/IPbTJ2Lv0dM3RaXoVf+CeK7gB2B+w1hZummD21c1Laua +VIMPCUQ+EM8W9EtX+0iJXxI+wsztLT6vltQcm+5Q7tY+HFUucizJkAOAz98YFucwKefbkTp eKvCfCwiM1bGatZEFFKIlvJ2QNMQNiUrqJBlW9nZp/k7pbG3oStOjvawD9ZbP9e0fnlWJIsj 6c7pX354Yi7kxIk/6gREidHLLqEb/otuwt1aoMPg97iUgDV5mlNef77lWE8vxmlY0FBWIXuZ yv0XYxf1WF6dRizwFFbxvUZzIJp3spAao7jLsQj1DbD2s5+S1BW09A0mI/1DjB6EhNN+4bDB SJCOv/ReK3tFJXuj/HbyDrOdoMt8aIFbe7YFLEExHpSk+HgN05Lg5TyTro8oW7TSMTk+8a5M kzaH4UGXTTBDP/g5cfL3RFPl79ubXwARAQABiQIfBBgBCAAJBQJXFRpKAhsMAAoJEKqx7BSn lIjvI/8P/jg0jl4Tbvg3B5kT6PxJOXHYu9OoyaHLcay6Cd+ZrOd1VQQCbOcgLFbf4Yr+rE9l mYsY67AUgq2QKmVVbn9pjvGsEaz8UmfDnz5epUhDxC6yRRvY4hreMXZhPZ1pbMa6A0a/WOSt AgFj5V6Z4dXGTM/lNManr0HjXxbUYv2WfbNt3/07Db9T+GZkpUotC6iknsTA4rJi6u2ls0W9 1UIvW4o01vb4nZRCj4rni0g6eWoQCGoVDk/xFfy7ZliR5B+3Z3EWRJcQskip/QAHjbLa3pml xAZ484fVxgeESOoaeC9TiBIp0NfH8akWOI0HpBCiBD5xaCTvR7ujUWMvhsX2n881r/hNlR9g fcE6q00qHSPAEgGr1bnFv74/1vbKtjeXLCcRKk3Ulw0bY1OoDxWQr86T2fZGJ/HIZuVVBf3+ gaYJF92GXFynHnea14nFFuFgOni0Mi1zDxYH/8yGGBXvo14KWd8JOW0NJPaCDFJkdS5hu0VY 7vJwKcyHJGxsCLU+Et0mryX8qZwqibJIzu7kUJQdQDljbRPDFd/xmGUFCQiQAncSilYOcxNU EMVCXPAQTteqkvA+gNqSaK1NM9tY0eQ4iJpo+aoX8HAcn4sZzt2pfUB9vQMTBJ2d4+m/qO6+ cFTAceXmIoFsN8+gFN3i8Is3u12u8xGudcBPvpoy4OoG Subject: Re: [PATCH v7] tst: time: Provide Y2038 tests for mktime (tst-mktime4.c) Message-ID: Date: Tue, 16 Feb 2021 10:43:02 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20210210223533.17457-1-lukma@denx.de> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-13.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Feb 2021 13:43:09 -0000 On 10/02/2021 19:35, Lukasz Majewski wrote: > This change adds new test to assess mktime's functionality. > > To be more specific - following use cases are checked: > - Pass struct tm as epoch time > - Pass struct tm as value just before Y2038 threshold (returned > value shall be 0x7FFFFFFF) > - Pass struct tm as the first value after Y2038 threshold > (expected value - 0x80000000) > > --- > Changes for v2: > - Remove FAIL_UNSUPPORTED() when sizeof (time_t) <= 4 > - Remove tzset () as it is already done in mktime () > - Use TEST_COMPARE to check if correct result is received > - Use "TZ=:" glibc extension to guarantee UTC time zone > - Add two more checks - prepare struct tm in a way that mktime will > return 0xFFFFFFFF and 0x100000000 > > Changes for v3: > - Remove .tm_wday and .tm_yday as are irrelevant > - Add (time_t) -1 cast when checking mktime return value > - Replace "executed" with "compiled". > - Use long long int as the exp_val type to avoid overflow compilation error > - Rename tm1 to tm32bitmax > - Define tm0, tmY2038, tm32bitmax as const > - Pass the pointer to copy of aforementioned structs to test_mktime_helper > > Changes for v4: > - Use __builtin_add_overflow instead of sizeof (time_t) > 4 to check > if time_t has overflowed. > > Changes for v5: > - Fix indentation of the struct tm > - Add more verbose error message when expected value is different han result > - Add test prefix to commit message > > Changes for v6: > - Add line parameter to test_mktime_helper() definition > > Changes for v7: > - Replace FAIL_EXIT1 with FAIL_RET to not exit immediately after error > - Change signature of test_mktime_helper() function to return value LGTM with a small nit below. Reviewed-by: Adhemerval Zanella > --- > time/Makefile | 2 +- > time/tst-mktime4.c | 109 +++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 110 insertions(+), 1 deletion(-) > create mode 100644 time/tst-mktime4.c > > diff --git a/time/Makefile b/time/Makefile > index 7caec2b271..a52b6b94bc 100644 > --- a/time/Makefile > +++ b/time/Makefile > @@ -48,7 +48,7 @@ tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \ > tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \ > tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \ > tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \ > - tst-adjtime tst-ctime tst-difftime > + tst-adjtime tst-ctime tst-difftime tst-mktime4 > > include ../Rules > Ok. > diff --git a/time/tst-mktime4.c b/time/tst-mktime4.c > new file mode 100644 > index 0000000000..30c5f131e4 > --- /dev/null > +++ b/time/tst-mktime4.c > @@ -0,0 +1,109 @@ > +/* Test for mktime (4) > + Copyright (C) 2021 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#include > +#include > +#include > + > +const struct tm tm0 = > + { > + .tm_year = 70, > + .tm_mon = 0, > + .tm_mday = 1, > + .tm_hour = 0, > + .tm_min = 0, > + .tm_sec = 0, > + .tm_wday = 4, > + .tm_yday = 0, > + }; > + > +const struct tm tmY2038 = > + { > + .tm_year = 138, > + .tm_mon = 0, > + .tm_mday = 19, > + .tm_hour = 3, > + .tm_min = 14, > + .tm_sec = 7, > + }; > + > +const struct tm tm32bitmax = > + { > + .tm_year = 206, > + .tm_mon = 1, > + .tm_mday = 7, > + .tm_hour = 6, > + .tm_min = 28, > + .tm_sec = 15, > + }; > + Ok. > +static > +int test_mktime_helper (struct tm *tm, long long int exp_val, int line) > +{ > + time_t result, t; > + > + /* Check if we run on port with 32 bit time_t size */ Double space before '*/'. > + if (__builtin_add_overflow (exp_val, 0, &t)) > + return 0; > + > + result = mktime (tm); > + if (result == (time_t) -1) > + FAIL_RET ("*** mktime failed: %m in line: %d", line); > + > + if ((long long int) result != exp_val) > + FAIL_RET ("*** Result different than expected (%lld != %lld) in %d\n", > + (long long int) result, exp_val, line); > + > + return 0; > +} > + > +static int > +do_test (void) > +{ > + struct tm t; > + /* Use glibc time zone extension "TZ=:" to to guarantee that UTC > + without leap seconds is used for the test. */ > + TEST_VERIFY_EXIT (setenv ("TZ", ":", 1) == 0); > + > + /* Check that mktime (1970-01-01 00:00:00) returns 0. */ > + t = tm0; > + test_mktime_helper (&t, 0, __LINE__); > + > + /* Check that mktime (2038-01-19 03:14:07) returns 0x7FFFFFFF. */ > + t = tmY2038; > + test_mktime_helper (&t, 0x7fffffff, __LINE__); > + > + /* Check that mktime (2038-01-19 03:14:08) returns 0x80000000 > + (time_t overflow). */ > + t = tmY2038; > + t.tm_sec++; > + test_mktime_helper (&t, 0x80000000, __LINE__); > + > + /* Check that mktime (2106-02-07 06:28:15) returns 0xFFFFFFFF. */ > + t = tm32bitmax; > + test_mktime_helper (&t, 0xFFFFFFFF, __LINE__); > + > + /* Check that mktime (2106-02-07 06:28:16) returns 0x100000000. */ > + t = tm32bitmax; > + t.tm_sec++; > + test_mktime_helper (&t, 0x100000000, __LINE__); > + > + return 0; > +} > + > +#include > Ok.