aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmd/devdraw/osx-screen.c49
1 files changed, 9 insertions, 40 deletions
diff --git a/src/cmd/devdraw/osx-screen.c b/src/cmd/devdraw/osx-screen.c
index 7c686ed9..abf276aa 100644
--- a/src/cmd/devdraw/osx-screen.c
+++ b/src/cmd/devdraw/osx-screen.c
@@ -732,7 +732,7 @@ struct {
char*
getsnarf(void)
{
- char *s;
+ char *s, *t;
CFArrayRef flavors;
CFDataRef data;
CFIndex nflavor, ndata, j;
@@ -741,9 +741,6 @@ getsnarf(void)
PasteboardItemID id;
PasteboardSyncFlags flags;
UInt32 i;
- u16int *u;
- Fmt fmt;
- Rune r;
/* fprint(2, "applegetsnarf\n"); */
qlock(&clip.lk);
@@ -778,26 +775,15 @@ getsnarf(void)
continue;
if(PasteboardCopyItemFlavorData(clip.apple, id, type, &data) != noErr)
continue;
+ ndata = CFDataGetLength(data);
qunlock(&clip.lk);
- ndata = CFDataGetLength(data)/2;
- u = (u16int*)CFDataGetBytePtr(data);
- fmtstrinit(&fmt);
- // decode utf-16. what was apple thinking?
- for(i=0; i<ndata; i++) {
- r = u[i];
- if(0xd800 <= r && r < 0xdc00 && i+1 < ndata && 0xdc00 <= u[i+1] && u[i+1] < 0xe000) {
- r = (((r - 0xd800)<<10) | (u[i+1] - 0xdc00)) + 0x10000;
- i++;
- }
- else if(0xd800 <= r && r < 0xe000)
- r = Runeerror;
- if(r == '\r')
- r = '\n';
- fmtrune(&fmt, r);
- }
+ s = smprint("%.*S", ndata/2, (Rune*)CFDataGetBytePtr(data));
CFRelease(flavors);
CFRelease(data);
- return fmtstrflush(&fmt);
+ for(t=s; *t; t++)
+ if(*t == '\r')
+ *t = '\n';
+ return s;
}
CFRelease(flavors);
}
@@ -810,9 +796,6 @@ putsnarf(char *s)
{
CFDataRef cfdata;
PasteboardSyncFlags flags;
- u16int *u, *p;
- Rune r;
- int i;
/* fprint(2, "appleputsnarf\n"); */
@@ -833,23 +816,9 @@ putsnarf(char *s)
qunlock(&clip.lk);
return;
}
- u = malloc(runestrlen(clip.rbuf)*4);
- p = u;
- for(i=0; clip.rbuf[i]; i++) {
- r = clip.rbuf[i];
- // convert to utf-16
- if(0xd800 <= r && r < 0xe000)
- r = Runeerror;
- if(r >= 0x10000) {
- r -= 0x10000;
- *p++ = 0xd800 + (r>>10);
- *p++ = 0xdc00 + (r & ((1<<10)-1));
- } else
- *p++ = r;
- }
+ assert(sizeof(clip.rbuf[0]) == 2);
cfdata = CFDataCreate(kCFAllocatorDefault,
- (uchar*)u, (p-u)*2);
- free(u);
+ (uchar*)clip.rbuf, runestrlen(clip.rbuf)*2);
if(cfdata == nil){
fprint(2, "apple pasteboard cfdatacreate failed\n");
qunlock(&clip.lk);