site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=8sQYHF7kLpo2tL1q7Fb4YSqH/BQt6IF0Z1/LaxZhlfk=; b=StCj5T5UAkehuDCVf1G6/NuboNcRp6+CTrHzdA4VkeOE2SzOHpwth0pHjToQpeRTbD RyfAXTgkFoejhwAwKmBMdD8SwZwuEtgYSFFEkbrP5ZMP7BXzNX7MIi72ZNGAlKmZNGGU s58+pEGEZwr4XEU1D5GPueAxCQj0dbS02sb5vKAMNgkNdDdF9+Hzji+3Hy+aTpAKc7H3 WyKM7m00myZoReajGu+IAxdL//LYh8mlKI/4irvqwfaLEikUWUigv2izyfe9qvjwuHRp fcvcjYhzv8xAsnU57abg8CUNLeyFe8ciC983eEID8/L3VcsEdmCHHEoXGS77Od/LkbqP FbVA== APFS has nanosecond based timestamps, and HFS+ only has second based timestamps. You'll need to scale accordingly. On Sun, Sep 10, 2017 at 1:13 AM, Stephane Sudre <dev.iceberg@gmail.com> wrote:
Very interesting. Thanks.
As a matter of fact, the code (and the value sent to gmtime_r) are extracted from the xar Apple source code (and when it's run on High Sierra):
https://opensource.apple.com/source/xar/xar-357/xar/lib/ darwinattr.c.auto.html
stragglers_archive
So now, it looks like the problem is earlier in the code and it comes from the value returned by getattrlist(2).
If I run the code (*) for a file on a HFS+ volume, the value looks correct. If I run the code for a file on a APFS volume, the value looks incorrect.
* In conditions specific to the code using the xar code, which is a launchd daemon and playing with a file that was very recently created.
On Sun, Sep 10, 2017 at 3:23 AM, Stephen J. Butler <stephen.butler@gmail.com> wrote:
It's not a bug IMHO. The problem is that you don't check the return value of gmtime_r(). If you did, you'd see that the result is NULL (which means the function failed) and so you shouldn't use any of the results (they're undefined).
#include <unistd.h> #include <time.h> #include <string.h> #include <stdio.h>
int main(int argc, const char * argv[]) {
char tmpc[128]; struct tm tm;
memset(tmpc, 0, sizeof(tmpc));
__darwin_time_t tValue=2914986787602432000;
if (gmtime_r(&tValue, &tm)) { strftime(tmpc, sizeof(tmpc), "%FT%T", &tm);
printf("time: %s\n",tmpc);
printf("-----------------\n"); }
struct tm tm2; tm2.tm_mon=10240;
memset(tmpc, 0, sizeof(tmpc));
tValue=2914986787602432000;
if (gmtime_r(&tValue, &tm2)) { strftime(tmpc, sizeof(tmpc), "%FT%T", &tm2);
printf("time: %s\n",tmpc); }
return 0; }
But also here, the number you're providing to tValue looks a lot like nanosecond time stamp, and gmtime_r() expects seconds. If you correct that, then you get:
time: 2062-05-16T06:33:07 ----------------- time: 2062-05-16T06:33:07
On Sat, Sep 9, 2017 at 5:51 PM, Stephane Sudre <dev.iceberg@gmail.com> wrote:
Maybe I'm missing something (regarding the tm var) but shouldn't all the struct tm fields be correctly set by gmtime_r?
#include <unistd.h> #include <time.h> #include <string.h> #include <stdio.h>
int main(int argc, const char * argv[]) {
char tmpc[128]; struct tm tm;
memset(tmpc, 0, sizeof(tmpc));
__darwin_time_t tValue=2914986787602432000;
gmtime_r(&tValue, &tm); strftime(tmpc, sizeof(tmpc), "%FT%T", &tm);
printf("time: %s\n",tmpc);
printf("-----------------\n");
struct tm tm2; tm2.tm_mon=10240;
memset(tmpc, 0, sizeof(tmpc));
tValue=2914986787602432000;
gmtime_r(&tValue, &tm2); strftime(tmpc, sizeof(tmpc), "%FT%T", &tm2);
printf("time: %s\n",tmpc);
return 0; }
=>
time: 1900-01-00T18:40:00 ----------------- time: 1900-10241-00T18:40:00 _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription:
stephen.butler%40gmail.com
This email sent to stephen.butler@gmail.com
-- Packaging Resources - http://s.sudre.free.fr/Packaging.html
_______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.app... This email sent to site_archiver@lists.apple.com