[fidl][go] Fix an empty response from a protocol method
Currently, both these two protocol method definitions generate
Dispatch() that returns nil as a response:
1. Foo() // no response.
2. Foo() -> () // the response is empty.
And the current Go bindings always thinks the nil response means
(1). Calling the method defined as (2) would get stuck because
there is no response coming back.
To fix (2), we replace Dispatch() with DispatchImpl() that returns
an extra boolean flag that tells if a response is required or
not. If the response is nil but the flag is true, Go bindings
can tell it is (2).
Bug: 8098
Change-Id: I5d814d164dc43c0e0c4b8a025b8925d455a38480
diff --git a/src/syscall/zx/fidl/bindings.go b/src/syscall/zx/fidl/bindings.go
index ea16421..b51a157 100644
--- a/src/syscall/zx/fidl/bindings.go
+++ b/src/syscall/zx/fidl/bindings.go
@@ -150,7 +150,7 @@
if err != nil {
return false, err
}
- p, err := b.Stub.Dispatch(header.Ordinal, msg[hnb:], handles)
+ p, shouldRespond, err := b.Stub.DispatchImpl(header.Ordinal, msg[hnb:], handles)
switch {
case err == ErrUnknownOrdinal:
// If we couldn't determine the ordinal, we still own the
@@ -162,8 +162,8 @@
case err != nil:
return false, err
}
- // Message has no response.
- if p == nil {
+ // Method has no response.
+ if !shouldRespond {
return false, nil
}
cnb, cnh, err := MarshalHeaderThenMessage(&header, p, respb, resph)
diff --git a/src/syscall/zx/fidl/bindingstest/impl.go b/src/syscall/zx/fidl/bindingstest/impl.go
index 7197d36..7ee163f 100644
--- a/src/syscall/zx/fidl/bindingstest/impl.go
+++ b/src/syscall/zx/fidl/bindingstest/impl.go
@@ -891,8 +891,10 @@
}
const (
- Test1EchoGenOrdinal uint64 = 0x4a4939ff00000000
- Test1SurpriseGenOrdinal uint64 = 0x4bd66e7200000000
+ Test1EchoGenOrdinal uint64 = 0x4a4939ff00000000
+ Test1NoResponseGenOrdinal uint64 = 0x7e0c050500000000
+ Test1EmptyResponseGenOrdinal uint64 = 0x648de0d00000000
+ Test1SurpriseGenOrdinal uint64 = 0x4bd66e7200000000
)
type test1EchoRequest struct {
@@ -939,6 +941,19 @@
return resp_.Out, err
}
+func (p *Test1Interface) NoResponse() error {
+ var req_ _bindings.Message
+ err := ((*_bindings.ChannelProxy)(p)).Send(Test1NoResponseGenOrdinal, req_)
+ return err
+}
+
+func (p *Test1Interface) EmptyResponse() error {
+ var req_ _bindings.Message
+ var resp_ _bindings.Message
+ err := ((*_bindings.ChannelProxy)(p)).Call(Test1EmptyResponseGenOrdinal, req_, resp_)
+ return err
+}
+
func (p *Test1Interface) ExpectSurprise() (string, error) {
resp_ := &test1SurpriseResponse{}
err := ((*_bindings.ChannelProxy)(p)).Recv(Test1SurpriseGenOrdinal, resp_)
@@ -947,6 +962,8 @@
type Test1 interface {
Echo(in *string) (*string, error)
+ NoResponse() error
+ EmptyResponse() error
}
type Test1TransitionalBase struct{}
@@ -962,19 +979,25 @@
Impl Test1
}
-func (s_ *Test1Stub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *Test1Stub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
case Test1EchoGenOrdinal:
in_ := test1EchoRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
out, err_ := s_.Impl.Echo(in_.In)
out_ := test1EchoResponse{}
out_.Out = out
- return &out_, err_
+ return &out_, true, err_
+ case Test1NoResponseGenOrdinal:
+ err_ := s_.Impl.NoResponse()
+ return nil, false, err_
+ case Test1EmptyResponseGenOrdinal:
+ err_ := s_.Impl.EmptyResponse()
+ return nil, true, err_
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type Test1Service struct {
@@ -1017,10 +1040,10 @@
Impl EthernetDevice
}
-func (s_ *EthernetDeviceStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *EthernetDeviceStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type EthernetDeviceService struct {
diff --git a/src/syscall/zx/fidl/bindingstest/test.test.fidl b/src/syscall/zx/fidl/bindingstest/test.test.fidl
index 7c9e9a6..9583b60 100644
--- a/src/syscall/zx/fidl/bindingstest/test.test.fidl
+++ b/src/syscall/zx/fidl/bindingstest/test.test.fidl
@@ -187,6 +187,8 @@
protocol Test1 {
Echo(string? in) -> (string? out);
+ NoResponse();
+ EmptyResponse() -> ();
-> Surprise(string foo);
};
diff --git a/src/syscall/zx/fidl/conformance/impl.go b/src/syscall/zx/fidl/conformance/impl.go
index 75f4fcb..bdedd2e 100644
--- a/src/syscall/zx/fidl/conformance/impl.go
+++ b/src/syscall/zx/fidl/conformance/impl.go
@@ -785,10 +785,10 @@
Impl EthernetDevice
}
-func (s_ *EthernetDeviceStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *EthernetDeviceStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type EthernetDeviceService struct {
diff --git a/src/syscall/zx/fidl/fidl_test/bindings_test.go b/src/syscall/zx/fidl/fidl_test/bindings_test.go
index 8ae7883..bd0cae6 100644
--- a/src/syscall/zx/fidl/fidl_test/bindings_test.go
+++ b/src/syscall/zx/fidl/fidl_test/bindings_test.go
@@ -25,6 +25,14 @@
return s, nil
}
+func (t *Test1Impl) NoResponse() error {
+ return nil
+}
+
+func (t *Test1Impl) EmptyResponse() error {
+ return nil
+}
+
func TestBindingSize(t *testing.T) {
clientEnd, serverEnd, err := zx.NewChannel(0)
if err != nil {
@@ -123,6 +131,20 @@
}
})
+ t.Run("NoResponse", func(t *testing.T) {
+ err := client.NoResponse()
+ if err != nil {
+ t.Fatal(err)
+ }
+ })
+
+ t.Run("EmptyResponse", func(t *testing.T) {
+ err := client.EmptyResponse()
+ if err != nil {
+ t.Fatal(err)
+ }
+ })
+
t.Run("Event", func(t *testing.T) {
str := "Surprise!"
done := make(chan struct{})
diff --git a/src/syscall/zx/fidl/interface.go b/src/syscall/zx/fidl/interface.go
index 03802f4..359cf8a 100644
--- a/src/syscall/zx/fidl/interface.go
+++ b/src/syscall/zx/fidl/interface.go
@@ -55,13 +55,13 @@
// It contains logic which is able to dispatch into the correct implementation given
// the incoming message ordinal and its data.
type Stub interface {
- // Dispatch dispatches into the appropriate method implementation for a FIDL
+ // DispatchImpl dispatches into the appropriate method implementation for a FIDL
// interface by using the ordinal.
//
// It also takes the data as bytes and transforms it into arguments usable by
// the method implementation. It then optionally returns a response if the
- // method has a response.
- Dispatch(ordinal uint64, bytes []byte, handles []zx.Handle) (Message, error)
+ // method has a response, in which case, the boolean return value is true.
+ DispatchImpl(ordinal uint64, bytes []byte, handles []zx.Handle) (Message, bool, error)
}
// ChannelProxy a Proxy that is backed by a channel.
diff --git a/src/syscall/zx/io/impl.go b/src/syscall/zx/io/impl.go
index c3685b9..3651b91 100644
--- a/src/syscall/zx/io/impl.go
+++ b/src/syscall/zx/io/impl.go
@@ -749,58 +749,58 @@
Impl Node
}
-func (s_ *NodeStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *NodeStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
case NodeCloneGenOrdinal:
in_ := nodeCloneRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
err_ := s_.Impl.Clone(in_.Flags, in_.Object)
- return nil, err_
+ return nil, false, err_
case NodeCloseGenOrdinal:
s, err_ := s_.Impl.Close()
out_ := nodeCloseResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case NodeDescribeGenOrdinal:
info, err_ := s_.Impl.Describe()
out_ := nodeDescribeResponse{}
out_.Info = info
- return &out_, err_
+ return &out_, true, err_
case NodeSyncGenOrdinal:
s, err_ := s_.Impl.Sync()
out_ := nodeSyncResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case NodeGetAttrGenOrdinal:
s, attributes, err_ := s_.Impl.GetAttr()
out_ := nodeGetAttrResponse{}
out_.S = s
out_.Attributes = attributes
- return &out_, err_
+ return &out_, true, err_
case NodeSetAttrGenOrdinal:
in_ := nodeSetAttrRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
out_ := nodeSetAttrResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case NodeIoctlGenOrdinal:
in_ := nodeIoctlRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, handles, out, err_ := s_.Impl.Ioctl(in_.Opcode, in_.MaxOut, in_.Handles, in_.In)
out_ := nodeIoctlResponse{}
out_.S = s
out_.Handles = handles
out_.Out = out
- return &out_, err_
+ return &out_, true, err_
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type NodeService struct {
@@ -1500,142 +1500,142 @@
Impl File
}
-func (s_ *FileStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *FileStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
case FileCloneGenOrdinal:
in_ := fileCloneRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
err_ := s_.Impl.Clone(in_.Flags, in_.Object)
- return nil, err_
+ return nil, false, err_
case FileCloseGenOrdinal:
s, err_ := s_.Impl.Close()
out_ := fileCloseResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case FileDescribeGenOrdinal:
info, err_ := s_.Impl.Describe()
out_ := fileDescribeResponse{}
out_.Info = info
- return &out_, err_
+ return &out_, true, err_
case FileSyncGenOrdinal:
s, err_ := s_.Impl.Sync()
out_ := fileSyncResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case FileGetAttrGenOrdinal:
s, attributes, err_ := s_.Impl.GetAttr()
out_ := fileGetAttrResponse{}
out_.S = s
out_.Attributes = attributes
- return &out_, err_
+ return &out_, true, err_
case FileSetAttrGenOrdinal:
in_ := fileSetAttrRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
out_ := fileSetAttrResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case FileIoctlGenOrdinal:
in_ := fileIoctlRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, handles, out, err_ := s_.Impl.Ioctl(in_.Opcode, in_.MaxOut, in_.Handles, in_.In)
out_ := fileIoctlResponse{}
out_.S = s
out_.Handles = handles
out_.Out = out
- return &out_, err_
+ return &out_, true, err_
case FileReadGenOrdinal:
in_ := fileReadRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, data, err_ := s_.Impl.Read(in_.Count)
out_ := fileReadResponse{}
out_.S = s
out_.Data = data
- return &out_, err_
+ return &out_, true, err_
case FileReadAtGenOrdinal:
in_ := fileReadAtRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, data, err_ := s_.Impl.ReadAt(in_.Count, in_.Offset)
out_ := fileReadAtResponse{}
out_.S = s
out_.Data = data
- return &out_, err_
+ return &out_, true, err_
case FileWriteGenOrdinal:
in_ := fileWriteRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, actual, err_ := s_.Impl.Write(in_.Data)
out_ := fileWriteResponse{}
out_.S = s
out_.Actual = actual
- return &out_, err_
+ return &out_, true, err_
case FileWriteAtGenOrdinal:
in_ := fileWriteAtRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, actual, err_ := s_.Impl.WriteAt(in_.Data, in_.Offset)
out_ := fileWriteAtResponse{}
out_.S = s
out_.Actual = actual
- return &out_, err_
+ return &out_, true, err_
case FileSeekGenOrdinal:
in_ := fileSeekRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, offset, err_ := s_.Impl.Seek(in_.Offset, in_.Start)
out_ := fileSeekResponse{}
out_.S = s
out_.Offset = offset
- return &out_, err_
+ return &out_, true, err_
case FileTruncateGenOrdinal:
in_ := fileTruncateRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Truncate(in_.Length)
out_ := fileTruncateResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case FileGetFlagsGenOrdinal:
s, flags, err_ := s_.Impl.GetFlags()
out_ := fileGetFlagsResponse{}
out_.S = s
out_.Flags = flags
- return &out_, err_
+ return &out_, true, err_
case FileSetFlagsGenOrdinal:
in_ := fileSetFlagsRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.SetFlags(in_.Flags)
out_ := fileSetFlagsResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case FileGetBufferGenOrdinal:
in_ := fileGetBufferRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, buffer, err_ := s_.Impl.GetBuffer(in_.Flags)
out_ := fileGetBufferResponse{}
out_.S = s
out_.Buffer = buffer
- return &out_, err_
+ return &out_, true, err_
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type FileService struct {
@@ -1707,17 +1707,17 @@
Impl DirectoryWatcher
}
-func (s_ *DirectoryWatcherStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *DirectoryWatcherStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
case DirectoryWatcherOnEventGenOrdinal:
in_ := directoryWatcherOnEventRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
err_ := s_.Impl.OnEvent(in_.Events)
- return nil, err_
+ return nil, false, err_
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type DirectoryWatcherService struct {
@@ -2502,122 +2502,122 @@
Impl Directory
}
-func (s_ *DirectoryStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *DirectoryStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
case DirectoryCloneGenOrdinal:
in_ := directoryCloneRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
err_ := s_.Impl.Clone(in_.Flags, in_.Object)
- return nil, err_
+ return nil, false, err_
case DirectoryCloseGenOrdinal:
s, err_ := s_.Impl.Close()
out_ := directoryCloseResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryDescribeGenOrdinal:
info, err_ := s_.Impl.Describe()
out_ := directoryDescribeResponse{}
out_.Info = info
- return &out_, err_
+ return &out_, true, err_
case DirectorySyncGenOrdinal:
s, err_ := s_.Impl.Sync()
out_ := directorySyncResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryGetAttrGenOrdinal:
s, attributes, err_ := s_.Impl.GetAttr()
out_ := directoryGetAttrResponse{}
out_.S = s
out_.Attributes = attributes
- return &out_, err_
+ return &out_, true, err_
case DirectorySetAttrGenOrdinal:
in_ := directorySetAttrRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
out_ := directorySetAttrResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryIoctlGenOrdinal:
in_ := directoryIoctlRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, handles, out, err_ := s_.Impl.Ioctl(in_.Opcode, in_.MaxOut, in_.Handles, in_.In)
out_ := directoryIoctlResponse{}
out_.S = s
out_.Handles = handles
out_.Out = out
- return &out_, err_
+ return &out_, true, err_
case DirectoryOpenGenOrdinal:
in_ := directoryOpenRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
err_ := s_.Impl.Open(in_.Flags, in_.Mode, in_.Path, in_.Object)
- return nil, err_
+ return nil, false, err_
case DirectoryUnlinkGenOrdinal:
in_ := directoryUnlinkRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Unlink(in_.Path)
out_ := directoryUnlinkResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryReadDirentsGenOrdinal:
in_ := directoryReadDirentsRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, dirents, err_ := s_.Impl.ReadDirents(in_.MaxBytes)
out_ := directoryReadDirentsResponse{}
out_.S = s
out_.Dirents = dirents
- return &out_, err_
+ return &out_, true, err_
case DirectoryRewindGenOrdinal:
s, err_ := s_.Impl.Rewind()
out_ := directoryRewindResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryGetTokenGenOrdinal:
s, token, err_ := s_.Impl.GetToken()
out_ := directoryGetTokenResponse{}
out_.S = s
out_.Token = token
- return &out_, err_
+ return &out_, true, err_
case DirectoryRenameGenOrdinal:
in_ := directoryRenameRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Rename(in_.Src, in_.DstParentToken, in_.Dst)
out_ := directoryRenameResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryLinkGenOrdinal:
in_ := directoryLinkRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Link(in_.Src, in_.DstParentToken, in_.Dst)
out_ := directoryLinkResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryWatchGenOrdinal:
in_ := directoryWatchRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Watch(in_.Mask, in_.Options, in_.Watcher)
out_ := directoryWatchResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type DirectoryService struct {
@@ -3588,163 +3588,163 @@
Impl DirectoryAdmin
}
-func (s_ *DirectoryAdminStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *DirectoryAdminStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
case DirectoryAdminCloneGenOrdinal:
in_ := directoryAdminCloneRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
err_ := s_.Impl.Clone(in_.Flags, in_.Object)
- return nil, err_
+ return nil, false, err_
case DirectoryAdminCloseGenOrdinal:
s, err_ := s_.Impl.Close()
out_ := directoryAdminCloseResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminDescribeGenOrdinal:
info, err_ := s_.Impl.Describe()
out_ := directoryAdminDescribeResponse{}
out_.Info = info
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminSyncGenOrdinal:
s, err_ := s_.Impl.Sync()
out_ := directoryAdminSyncResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminGetAttrGenOrdinal:
s, attributes, err_ := s_.Impl.GetAttr()
out_ := directoryAdminGetAttrResponse{}
out_.S = s
out_.Attributes = attributes
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminSetAttrGenOrdinal:
in_ := directoryAdminSetAttrRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
out_ := directoryAdminSetAttrResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminIoctlGenOrdinal:
in_ := directoryAdminIoctlRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, handles, out, err_ := s_.Impl.Ioctl(in_.Opcode, in_.MaxOut, in_.Handles, in_.In)
out_ := directoryAdminIoctlResponse{}
out_.S = s
out_.Handles = handles
out_.Out = out
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminOpenGenOrdinal:
in_ := directoryAdminOpenRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
err_ := s_.Impl.Open(in_.Flags, in_.Mode, in_.Path, in_.Object)
- return nil, err_
+ return nil, false, err_
case DirectoryAdminUnlinkGenOrdinal:
in_ := directoryAdminUnlinkRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Unlink(in_.Path)
out_ := directoryAdminUnlinkResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminReadDirentsGenOrdinal:
in_ := directoryAdminReadDirentsRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, dirents, err_ := s_.Impl.ReadDirents(in_.MaxBytes)
out_ := directoryAdminReadDirentsResponse{}
out_.S = s
out_.Dirents = dirents
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminRewindGenOrdinal:
s, err_ := s_.Impl.Rewind()
out_ := directoryAdminRewindResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminGetTokenGenOrdinal:
s, token, err_ := s_.Impl.GetToken()
out_ := directoryAdminGetTokenResponse{}
out_.S = s
out_.Token = token
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminRenameGenOrdinal:
in_ := directoryAdminRenameRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Rename(in_.Src, in_.DstParentToken, in_.Dst)
out_ := directoryAdminRenameResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminLinkGenOrdinal:
in_ := directoryAdminLinkRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Link(in_.Src, in_.DstParentToken, in_.Dst)
out_ := directoryAdminLinkResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminWatchGenOrdinal:
in_ := directoryAdminWatchRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Watch(in_.Mask, in_.Options, in_.Watcher)
out_ := directoryAdminWatchResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminMountGenOrdinal:
in_ := directoryAdminMountRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.Mount(in_.Remote)
out_ := directoryAdminMountResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminMountAndCreateGenOrdinal:
in_ := directoryAdminMountAndCreateRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.MountAndCreate(in_.Remote, in_.Name, in_.Flags)
out_ := directoryAdminMountAndCreateResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminUnmountGenOrdinal:
s, err_ := s_.Impl.Unmount()
out_ := directoryAdminUnmountResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminUnmountNodeGenOrdinal:
s, remote, err_ := s_.Impl.UnmountNode()
out_ := directoryAdminUnmountNodeResponse{}
out_.S = s
out_.Remote = remote
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminQueryFilesystemGenOrdinal:
s, info, err_ := s_.Impl.QueryFilesystem()
out_ := directoryAdminQueryFilesystemResponse{}
out_.S = s
out_.Info = info
- return &out_, err_
+ return &out_, true, err_
case DirectoryAdminGetDevicePathGenOrdinal:
s, path, err_ := s_.Impl.GetDevicePath()
out_ := directoryAdminGetDevicePathResponse{}
out_.S = s
out_.Path = path
- return &out_, err_
+ return &out_, true, err_
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type DirectoryAdminService struct {
diff --git a/src/syscall/zx/net/impl.go b/src/syscall/zx/net/impl.go
index b37d74b..9050b09 100644
--- a/src/syscall/zx/net/impl.go
+++ b/src/syscall/zx/net/impl.go
@@ -622,136 +622,136 @@
Impl Control
}
-func (s_ *ControlStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *ControlStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
case ControlCloneGenOrdinal:
in_ := controlCloneRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
err_ := s_.Impl.Clone(in_.Flags, in_.Object)
- return nil, err_
+ return nil, false, err_
case ControlCloseGenOrdinal:
s, err_ := s_.Impl.Close()
out_ := controlCloseResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case ControlDescribeGenOrdinal:
info, err_ := s_.Impl.Describe()
out_ := controlDescribeResponse{}
out_.Info = info
- return &out_, err_
+ return &out_, true, err_
case ControlSyncGenOrdinal:
s, err_ := s_.Impl.Sync()
out_ := controlSyncResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case ControlGetAttrGenOrdinal:
s, attributes, err_ := s_.Impl.GetAttr()
out_ := controlGetAttrResponse{}
out_.S = s
out_.Attributes = attributes
- return &out_, err_
+ return &out_, true, err_
case ControlSetAttrGenOrdinal:
in_ := controlSetAttrRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
out_ := controlSetAttrResponse{}
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case ControlIoctlGenOrdinal:
in_ := controlIoctlRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
s, handles, out, err_ := s_.Impl.Ioctl(in_.Opcode, in_.MaxOut, in_.Handles, in_.In)
out_ := controlIoctlResponse{}
out_.S = s
out_.Handles = handles
out_.Out = out
- return &out_, err_
+ return &out_, true, err_
case ControlBindGenOrdinal:
in_ := controlBindRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
code, err_ := s_.Impl.Bind(in_.Addr)
out_ := controlBindResponse{}
out_.Code = code
- return &out_, err_
+ return &out_, true, err_
case ControlConnectGenOrdinal:
in_ := controlConnectRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
code, err_ := s_.Impl.Connect(in_.Addr)
out_ := controlConnectResponse{}
out_.Code = code
- return &out_, err_
+ return &out_, true, err_
case ControlListenGenOrdinal:
in_ := controlListenRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
code, err_ := s_.Impl.Listen(in_.Backlog)
out_ := controlListenResponse{}
out_.Code = code
- return &out_, err_
+ return &out_, true, err_
case ControlAcceptGenOrdinal:
in_ := controlAcceptRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
code, s, err_ := s_.Impl.Accept(in_.Flags)
out_ := controlAcceptResponse{}
out_.Code = code
out_.S = s
- return &out_, err_
+ return &out_, true, err_
case ControlGetSockNameGenOrdinal:
code, addr, err_ := s_.Impl.GetSockName()
out_ := controlGetSockNameResponse{}
out_.Code = code
out_.Addr = addr
- return &out_, err_
+ return &out_, true, err_
case ControlGetPeerNameGenOrdinal:
code, addr, err_ := s_.Impl.GetPeerName()
out_ := controlGetPeerNameResponse{}
out_.Code = code
out_.Addr = addr
- return &out_, err_
+ return &out_, true, err_
case ControlSetSockOptGenOrdinal:
in_ := controlSetSockOptRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
code, err_ := s_.Impl.SetSockOpt(in_.Level, in_.Optname, in_.Optval)
out_ := controlSetSockOptResponse{}
out_.Code = code
- return &out_, err_
+ return &out_, true, err_
case ControlGetSockOptGenOrdinal:
in_ := controlGetSockOptRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
code, optval, err_ := s_.Impl.GetSockOpt(in_.Level, in_.Optname)
out_ := controlGetSockOptResponse{}
out_.Code = code
out_.Optval = optval
- return &out_, err_
+ return &out_, true, err_
case ControlIoctlPosixGenOrdinal:
in_ := controlIoctlPosixRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
code, out, err_ := s_.Impl.IoctlPosix(in_.Req, in_.In)
out_ := controlIoctlPosixResponse{}
out_.Code = code
out_.Out = out
- return &out_, err_
+ return &out_, true, err_
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type ControlService struct {
@@ -851,20 +851,20 @@
Impl Provider
}
-func (s_ *ProviderStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+func (s_ *ProviderStub) DispatchImpl(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, bool, error) {
switch ordinal_ {
case ProviderSocketGenOrdinal:
in_ := providerSocketRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
+ return nil, false, err_
}
code, s, err_ := s_.Impl.Socket(in_.Domain, in_.Type, in_.Protocol)
out_ := providerSocketResponse{}
out_.Code = code
out_.S = s
- return &out_, err_
+ return &out_, true, err_
}
- return nil, _bindings.ErrUnknownOrdinal
+ return nil, false, _bindings.ErrUnknownOrdinal
}
type ProviderService struct {