Cygwin: remove 32-bit only clipboard code
This commit is contained in:
parent
f6bb8bfaa0
commit
b1e304cbd3
|
@ -68,14 +68,6 @@ fhandler_dev_clipboard::set_clipboard (const void *buf, size_t len)
|
||||||
clipbuf = (cygcb_t *) GlobalLock (hmem);
|
clipbuf = (cygcb_t *) GlobalLock (hmem);
|
||||||
|
|
||||||
clock_gettime (CLOCK_REALTIME, &clipbuf->ts);
|
clock_gettime (CLOCK_REALTIME, &clipbuf->ts);
|
||||||
#ifdef __x86_64__
|
|
||||||
/* ts overlays cb_sec and cb_nsec such that no conversion is needed */
|
|
||||||
#elif __i386__
|
|
||||||
/* Expand 32-bit timespec layout to 64-bit layout.
|
|
||||||
NOTE: Steps must be done in this order to avoid data loss. */
|
|
||||||
clipbuf->cb_nsec = clipbuf->ts.tv_nsec;
|
|
||||||
clipbuf->cb_sec = clipbuf->ts.tv_sec;
|
|
||||||
#endif
|
|
||||||
clipbuf->cb_size = len;
|
clipbuf->cb_size = len;
|
||||||
memcpy (clipbuf->cb_data, buf, len); // append user-supplied data
|
memcpy (clipbuf->cb_data, buf, len); // append user-supplied data
|
||||||
|
|
||||||
|
@ -180,14 +172,6 @@ fhandler_dev_clipboard::fstat (struct stat *buf)
|
||||||
&& (hglb = GetClipboardData (format))
|
&& (hglb = GetClipboardData (format))
|
||||||
&& (clipbuf = (cygcb_t *) GlobalLock (hglb)))
|
&& (clipbuf = (cygcb_t *) GlobalLock (hglb)))
|
||||||
{
|
{
|
||||||
#ifdef __x86_64__
|
|
||||||
/* ts overlays cb_sec and cb_nsec such that no conversion is needed */
|
|
||||||
#elif __i386__
|
|
||||||
/* Compress 64-bit timespec layout to 32-bit layout.
|
|
||||||
NOTE: Steps must be done in this order to avoid data loss. */
|
|
||||||
clipbuf->ts.tv_sec = clipbuf->cb_sec;
|
|
||||||
clipbuf->ts.tv_nsec = clipbuf->cb_nsec;
|
|
||||||
#endif
|
|
||||||
buf->st_atim = buf->st_mtim = clipbuf->ts;
|
buf->st_atim = buf->st_mtim = clipbuf->ts;
|
||||||
buf->st_size = clipbuf->cb_size;
|
buf->st_size = clipbuf->cb_size;
|
||||||
GlobalUnlock (hglb);
|
GlobalUnlock (hglb);
|
||||||
|
|
|
@ -17,33 +17,18 @@ details. */
|
||||||
|
|
||||||
static const WCHAR *CYGWIN_NATIVE = L"CYGWIN_NATIVE_CLIPBOARD";
|
static const WCHAR *CYGWIN_NATIVE = L"CYGWIN_NATIVE_CLIPBOARD";
|
||||||
|
|
||||||
/*
|
|
||||||
* The following layout of cygcb_t is new with Cygwin 3.3.0. It aids in the
|
|
||||||
* transfer of clipboard contents between 32- and 64-bit Cygwin environments.
|
|
||||||
*/
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
/*
|
struct timespec ts;
|
||||||
* Note that ts below overlays the struct following it. On 32-bit Cygwin
|
|
||||||
* timespec values have to be converted to|from cygcb_t layout. On 64-bit
|
|
||||||
* Cygwin timespec values perfectly conform to the struct following, so
|
|
||||||
* no conversion is needed.
|
|
||||||
*
|
|
||||||
* We avoid directly using 'struct timespec' or 'size_t' here because they
|
|
||||||
* are different sizes on different architectures. When copy/pasting
|
|
||||||
* between 32- and 64-bit Cygwin, the pasted data could appear corrupted,
|
|
||||||
* or partially interpreted as a size which can cause an access violation.
|
|
||||||
*/
|
|
||||||
struct timespec ts; // 8 bytes on 32-bit Cygwin, 16 bytes on 64-bit Cygwin
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint64_t cb_sec; // 8 bytes everywhere
|
uint64_t cb_sec; // == ts.tv_sec
|
||||||
uint64_t cb_nsec; // 8 bytes everywhere
|
uint64_t cb_nsec; // == ts.tv_nsec
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
uint64_t cb_size; // 8 bytes everywhere
|
uint64_t cb_size;
|
||||||
char cb_data[];
|
char cb_data[];
|
||||||
} cygcb_t;
|
} cygcb_t;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue