On 10/8/2021 5:52 AM, Takashi Yano wrote:
How about simply just:

diff --git a/winsup/cygwin/fhandler_clipboard.cc 
b/winsup/cygwin/fhandler_clipboard.cc
index ccdb295f3..d822f4fc4 100644
--- a/winsup/cygwin/fhandler_clipboard.cc
+++ b/winsup/cygwin/fhandler_clipboard.cc
@@ -28,9 +28,10 @@ static const WCHAR *CYGWIN_NATIVE = 
L"CYGWIN_NATIVE_CLIPBOARD";
typedef struct
  {
-  timestruc_t  timestamp;
-  size_t       len;
-  char         data[1];
+  uint64_t tv_sec;
+  uint64_t tv_nsec;
+  uint64_t len;
+  char data[1];
  } cygcb_t;

The only problem with this is that it might leave readers scratching their heads unless they look at the commit that introduced this. What about something like the following, in which the code speaks for itself:

diff --git a/winsup/cygwin/fhandler_clipboard.cc b/winsup/cygwin/fhandler_clipboard.cc
index ccdb295f3..028c00f1e 100644
--- a/winsup/cygwin/fhandler_clipboard.cc
+++ b/winsup/cygwin/fhandler_clipboard.cc
@@ -26,12 +26,26 @@ details. */

 static const WCHAR *CYGWIN_NATIVE = L"CYGWIN_NATIVE_CLIPBOARD";

+#ifdef __x86_64__
 typedef struct
 {
   timestruc_t  timestamp;
   size_t       len;
   char         data[1];
 } cygcb_t;
+#else
+/* Use same layout. */
+typedef struct
+{
+  struct
+  {
+    int64_t tv_sec;
+    int64_t tv_nsec;
+  }            timestamp;
+  uint64_t     len;
+  char         data[1];
+} cygcb_t;
+#endif

 fhandler_dev_clipboard::fhandler_dev_clipboard ()
   : fhandler_base (), pos (0), membuffer (NULL), msize (0)
@@ -74,7 +88,14 @@ fhandler_dev_clipboard::set_clipboard (const void *buf, size_t len)
        }
       clipbuf = (cygcb_t *) GlobalLock (hmem);

+#ifdef __x86_64__
       clock_gettime (CLOCK_REALTIME, &clipbuf->timestamp);
+#else
+      timestruc_t ts;
+      clock_gettime (CLOCK_REALTIME, &ts);
+      clipbuf->timestamp->tv_sec = ts.tv_sec;
+      clipbuf->timestamp->tv_nsec = ts.tv_nsec;
+#endif
       clipbuf->len = len;
       memcpy (clipbuf->data, buf, len);

@@ -179,7 +200,14 @@ fhandler_dev_clipboard::fstat (struct stat *buf)
          && (hglb = GetClipboardData (format))
          && (clipbuf = (cygcb_t *) GlobalLock (hglb)))
        {
+#ifdef __x86_64__
          buf->st_atim = buf->st_mtim = clipbuf->timestamp;
+#else
+         timestruc_t ts;
+         ts.tv_sec = clipbuf->timestamp->tv_sec;
+         ts.tv_nsec = clipbuf->timestamp->tv_nsec;
+         buf->st_atim = buf->st_mtim = ts;
+#endif
          buf->st_size = clipbuf->len;
          GlobalUnlock (hglb);
        }

Ken

Reply via email to