summaryrefslogtreecommitdiff
path: root/redo/dialog_windows.go
blob: 0346f56cbea6a76ddc224229b8baa2bc73bb6da2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 18 august 2014

package ui

import (
	"syscall"
	"unsafe"
	"reflect"
)

// #include "winapi_windows.h"
import "C"

// TODO move to common_windows.go
func wstrToString(wstr *C.WCHAR) string {
	n := C.wcslen((*C.wchar_t)(unsafe.Pointer(wstr)))
	xbuf := &reflect.SliceHeader{
		Data:	uintptr(unsafe.Pointer(wstr)),
		Len:		int(n + 1),
		Cap:		int(n + 1),
	}
	buf := (*[]uint16)(unsafe.Pointer(xbuf))
	return syscall.UTF16ToString(*buf)
}

func openFile() string {
	name := C.openFile()
	if name == nil {
		return ""
	}
	defer C.free(unsafe.Pointer(name))
	return wstrToString(name)
}