func GetStreamRefPaths(f FSEventStreamRef) []string {
	arr := C.FSEventStreamCopyPathsBeingWatched(f)
	l := cfArrayLen(arr)
	ss := make([]string, l)
	for i := range ss {
		void := C.CFArrayGetValueAtIndex(arr, C.CFIndex(i))
		ss[i] = cfStringToGoString(C.CFStringRef(void))
	}
	return ss
}
GetStreamRefPaths returns a copy of the paths being watched by
this stream
package fsevents
import "C"
import (
	"fmt"
	"log"
	"path/filepath"
	"reflect"
	"runtime"
	"time"
	"unsafe"
)
func LatestEventID() uint64 {
	return uint64(C.FSEventsGetCurrentEventId())
}
func fsevtCallback(stream C.FSEventStreamRef, info uintptr, numEvents C.size_t, cpaths **C.char, cflags *C.FSEventStreamEventFlags, cids *C.FSEventStreamEventId) {
	l := int(numEvents)
	events := make([]Event, l)
	es := registry.Get(info)
	if es == nil {
		log.Printf("failed to retrieve registry %d", info)
		return
	}
	paths := (*[1 << 30]*C.char)(unsafe.Pointer(cpaths))[:l:l]
	ids := (*[1 << 30]C.FSEventStreamEventId)(unsafe.Pointer(cids))[:l:l]
	flags := (*[1 << 30]C.FSEventStreamEventFlags)(unsafe.Pointer(cflags))[:l:l]
	for i := range events {
		events[i] = Event{
			Path:  C.GoString(paths[i]),
			Flags: EventFlags(flags[i]),
			ID:    uint64(ids[i]),
		}
		es.EventID = uint64(ids[i])
	}
	es.Events <- events
}
type FSEventStreamRef C.FSEventStreamRef
func GetStreamRefEventID(f FSEventStreamRef) uint64 {
	return uint64(C.FSEventStreamGetLatestEventId(f))
}
func GetStreamRefDeviceID(f FSEventStreamRef) int32 {
	return int32(C.FSEventStreamGetDeviceBeingWatched(f))
}
func GetStreamRefDescription(f FSEventStreamRef) string {
	return cfStringToGoString(C.FSEventStreamCopyDescription(f))
}