[Buildroot] [git commit branch/next] package/openvmtools: fix time_t build failure on 32-bit platforms
Thomas Petazzoni
thomas.petazzoni at bootlin.com
Thu Aug 19 20:47:10 UTC 2021
commit: https://git.buildroot.net/buildroot/commit/?id=75b02d6f3d2ce2478ffd41a856b24dde353583b5
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/next
Add upstream pending patch[1] to fix time_t on 32-bit platform.
[1]: https://github.com/vmware/open-vm-tools/pull/387
Fixes:
http://autobuild.buildroot.net/results/eb3dfe679536b578a0f16762312a96ada7162095/
Signed-off-by: Giulio Benetti <giulio.benetti at benettiengineering.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
---
...nvertFromNtTimeNsec-aware-of-64-bit-time_.patch | 80 ++++++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/package/openvmtools/0012-Make-HgfsConvertFromNtTimeNsec-aware-of-64-bit-time_.patch b/package/openvmtools/0012-Make-HgfsConvertFromNtTimeNsec-aware-of-64-bit-time_.patch
new file mode 100644
index 0000000000..dbe2c29a2b
--- /dev/null
+++ b/package/openvmtools/0012-Make-HgfsConvertFromNtTimeNsec-aware-of-64-bit-time_.patch
@@ -0,0 +1,80 @@
+From 3f0580f2546de8be7acf1bc78a55a257bc638ebe Mon Sep 17 00:00:00 2001
+From: Bartosz Brachaczek <b.brachaczek at gmail.com>
+Date: Tue, 12 Nov 2019 14:31:08 +0100
+Subject: [PATCH] Make HgfsConvertFromNtTimeNsec aware of 64-bit time_t on i386
+
+I verified that this function behaves as expected on x86_64, i386 with
+32-bit time_t, and i386 with 64-bit time_t for the following values of
+ntTtime:
+
+UNIX_EPOCH-1, UNIX_EPOCH, UNIX_EPOCH+1, UNIX_S32_MAX-1, UNIX_S32_MAX,
+UNIX_S32_MAX+1, UNIX_S32_MAX*2+1
+
+I did not verify whether the use of Div643264 is optimal, performance
+wise.
+
+Signed-off-by: Giulio Benetti <giulio.benetti at benettiengineering.com>
+---
+ lib/hgfs/hgfsUtil.c | 34 +++++++++++++++++++---------------
+ 1 file changed, 19 insertions(+), 15 deletions(-)
+
+diff --git a/lib/hgfs/hgfsUtil.c b/lib/hgfs/hgfsUtil.c
+index cc580ab8..49b10040 100644
+--- a/lib/hgfs/hgfsUtil.c
++++ b/lib/hgfs/hgfsUtil.c
+@@ -110,23 +110,21 @@ HgfsConvertFromNtTimeNsec(struct timespec *unixTime, // OUT: Time in UNIX format
+ uint64 ntTime) // IN: Time in Windows NT format
+ {
+ #ifdef __i386__
+- uint32 sec;
+- uint32 nsec;
++ uint64 sec64;
++ uint32 sec32, nsec;
++#endif
+
+ ASSERT(unixTime);
+- /* We assume that time_t is 32bit */
+- ASSERT_ON_COMPILE(sizeof (unixTime->tv_sec) == 4);
+
+- /* Cap NT time values that are outside of Unix time's range */
++ if (sizeof (unixTime->tv_sec) == 4) {
++ /* Cap NT time values that are outside of Unix time's range */
+
+- if (ntTime >= UNIX_S32_MAX) {
+- unixTime->tv_sec = 0x7FFFFFFF;
+- unixTime->tv_nsec = 0;
+- return 1;
++ if (ntTime >= UNIX_S32_MAX) {
++ unixTime->tv_sec = 0x7FFFFFFF;
++ unixTime->tv_nsec = 0;
++ return 1;
++ }
+ }
+-#else
+- ASSERT(unixTime);
+-#endif
+
+ if (ntTime < UNIX_EPOCH) {
+ unixTime->tv_sec = 0;
+@@ -135,9 +133,15 @@ HgfsConvertFromNtTimeNsec(struct timespec *unixTime, // OUT: Time in UNIX format
+ }
+
+ #ifdef __i386__
+- Div643232(ntTime - UNIX_EPOCH, 10000000, &sec, &nsec);
+- unixTime->tv_sec = sec;
+- unixTime->tv_nsec = nsec * 100;
++ if (sizeof (unixTime->tv_sec) == 4) {
++ Div643232(ntTime - UNIX_EPOCH, 10000000, &sec32, &nsec);
++ unixTime->tv_sec = sec32;
++ unixTime->tv_nsec = nsec * 100;
++ } else {
++ Div643264(ntTime - UNIX_EPOCH, 10000000, &sec64, &nsec);
++ unixTime->tv_sec = sec64;
++ unixTime->tv_nsec = nsec * 100;
++ }
+ #else
+ unixTime->tv_sec = (ntTime - UNIX_EPOCH) / 10000000;
+ unixTime->tv_nsec = ((ntTime - UNIX_EPOCH) % 10000000) * 100;
+--
+2.25.1
+
More information about the buildroot
mailing list