func (cfr *cameraFileReader) Close() error { if !cfr.closed { // If I understand correctly, freeing the CameraFile will also free the data buffer (ie. cfr.cBuffer) C.gp_file_free(cfr.cCameraFile) cfr.closed = true } return nil }
//DownloadImage saves image pointed by path to the provided buffer. If leave on camera is set to false,the file will be deleted from the camera internal storage func (file *CameraFilePath) DownloadImage(buffer io.Writer, leaveOnCamera bool) error { gpFile, err := newGpFile() if err != nil { return err } defer C.gp_file_free(gpFile) fileDir := C.CString(file.Folder) defer C.free(unsafe.Pointer(fileDir)) fileName := C.CString(file.Name) defer C.free(unsafe.Pointer(fileName)) if retval := C.gp_camera_file_get(file.camera.gpCamera, fileDir, fileName, FileTypeNormal, gpFile, file.camera.gpContext); retval != gpOk { return fmt.Errorf("Cannot download photo file, error code :%v", retval) } err = getFileBytes(gpFile, buffer) if err != nil && leaveOnCamera == false { C.gp_camera_file_delete(file.camera.gpCamera, fileDir, fileName, file.camera.gpContext) } return err }