func (s *Serializer) StartStream(file *os.File, base_uri string) (err error) { var buri *C.raptor_uri s.mutex.Lock() defer s.mutex.Unlock() if s.running { err = errors.New("serializer already running") return } s.running = true if len(base_uri) > 0 { cbase_uri := C.CString(base_uri) buri = C.raptor_new_uri(s.world, (*C.uchar)(unsafe.Pointer(cbase_uri))) C.free(unsafe.Pointer(cbase_uri)) // XXX LEAK defer C.raptor_free_uri(buri) } cwb := C.CString("wb") fh, err := C.fdopen(C.int(file.Fd()), cwb) C.free(unsafe.Pointer(cwb)) if fh == nil { err = errors.New("fdopen: ...") return } s.fh = fh if C.raptor_serializer_start_to_file_handle(s.serializer, buri, s.fh) != 0 { err = errors.New("raptor_serializer_start_to_file_handle failed") return } return }
func (s *Serializer) SetFile(fp *os.File, base_uri string) (err error) { s.mutex.Lock() defer s.mutex.Unlock() mode := C.CString("w") fh, err := C.fdopen(C.int(fp.Fd()), mode) // do something better with mode? C.free(unsafe.Pointer(mode)) if err != nil { return } s.fh = fh var buri *C.raptor_uri if len(base_uri) > 0 { cbase_uri := C.CString(base_uri) buri = C.raptor_new_uri(s.world, (*C.uchar)(unsafe.Pointer(cbase_uri))) C.free(unsafe.Pointer(cbase_uri)) defer C.raptor_free_uri(buri) } if C.raptor_serializer_start_to_file_handle(s.serializer, buri, s.fh) != 0 { err = errors.New("C.raptor_serializer_start_to_file_handle failed") return } s.running = true return }