Skip to content

Commit de98835

Browse files
committed
test: allow write empty data
1 parent e67178a commit de98835

File tree

4 files changed

+31
-6
lines changed

4 files changed

+31
-6
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Written by Changkun Ou <changkun.de>
66

7-
FROM golang:1.16rc1
7+
FROM golang:1.16
88
RUN apt-get update && apt-get install -y \
99
xvfb libx11-dev \
1010
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

clipboard_darwin.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,19 @@ func write(t Format, buf []byte) (bool, <-chan struct{}) {
5454
var ok C.int
5555
switch t {
5656
case FmtText:
57-
ok = C.clipboard_write_string(unsafe.Pointer(&buf[0]),
58-
C.NSInteger(len(buf)))
57+
if len(buf) == 0 {
58+
ok = C.clipboard_write_string(unsafe.Pointer(nil), 0)
59+
} else {
60+
ok = C.clipboard_write_string(unsafe.Pointer(&buf[0]),
61+
C.NSInteger(len(buf)))
62+
}
5963
case FmtImage:
60-
ok = C.clipboard_write_image(unsafe.Pointer(&buf[0]),
61-
C.NSInteger(len(buf)))
64+
if len(buf) == 0 {
65+
ok = C.clipboard_write_image(unsafe.Pointer(nil), 0)
66+
} else {
67+
ok = C.clipboard_write_image(unsafe.Pointer(&buf[0]),
68+
C.NSInteger(len(buf)))
69+
}
6270
}
6371
if ok != 0 {
6472
return false, nil

clipboard_linux.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,12 @@ func write(t Format, buf []byte) (bool, <-chan struct{}) {
9191
cs := C.CString(s)
9292
defer C.free(unsafe.Pointer(cs))
9393

94-
ok := C.clipboard_write(cs, (*C.uchar)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), &start)
94+
var ok C.int
95+
if len(buf) == 0 {
96+
ok = C.clipboard_write(cs, nil, 0, &start)
97+
} else {
98+
ok = C.clipboard_write(cs, (*C.uchar)(unsafe.Pointer(&(buf[0]))), C.size_t(len(buf)), &start)
99+
}
95100
if ok != C.int(0) {
96101
fmt.Fprintf(os.Stderr, "write failed with status: %d\n", int(ok))
97102
}

clipboard_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,18 @@ func TestClipboardConcurrentRead(t *testing.T) {
119119
<-done
120120
}
121121

122+
func TestClipboardWriteEmpty(t *testing.T) {
123+
chg1 := clipboard.Write(clipboard.FmtText, nil)
124+
if got := clipboard.Read(clipboard.FmtText); got != nil {
125+
t.Fatalf("write nil to clipboard should read nil, got: %v", string(got))
126+
}
127+
clipboard.Write(clipboard.FmtText, []byte(""))
128+
<-chg1
129+
130+
if got := clipboard.Read(clipboard.FmtText); string(got) != "" {
131+
t.Fatalf("write empty string to clipboard should read empty string, got: `%v`", string(got))
132+
}
133+
}
122134
func BenchmarkClipboard(b *testing.B) {
123135

124136
b.Run("text", func(b *testing.B) {

0 commit comments

Comments
 (0)