| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <lib/fidl/internal.h> |
| #include <zircon/assert.h> |
| |
| #ifdef __Fuchsia__ |
| #include <zircon/syscalls.h> |
| #endif // __Fuchsia__ |
| |
| zx_status_t FidlHandleCloseMany(const zx_handle_t* handles, size_t num_handles) { |
| if (num_handles == 0) { |
| return ZX_OK; |
| } |
| #ifdef __Fuchsia__ |
| return zx_handle_close_many(handles, num_handles); |
| #else |
| ZX_PANIC("handle closing not implemented on host"); |
| #endif // __Fuchsia__ |
| } |
| |
| zx_status_t FidlHandleDispositionCloseMany(const zx_handle_disposition_t* handle_dispositions, |
| size_t num_handles) { |
| if (num_handles == 0) { |
| return ZX_OK; |
| } |
| #ifdef __Fuchsia__ |
| ZX_ASSERT(num_handles <= ZX_CHANNEL_MAX_MSG_HANDLES); |
| zx_handle_t handles[ZX_CHANNEL_MAX_MSG_HANDLES]; |
| for (size_t i = 0; i < num_handles; i++) { |
| handles[i] = handle_dispositions[i].handle; |
| } |
| return zx_handle_close_many(handles, num_handles); |
| #else |
| ZX_PANIC("handle closing not implemented on host"); |
| #endif // __Fuchsia__ |
| } |
| |
| zx_status_t FidlHandleInfoCloseMany(const zx_handle_info_t* handle_infos, size_t num_handles) { |
| if (num_handles == 0) { |
| return ZX_OK; |
| } |
| #ifdef __Fuchsia__ |
| ZX_ASSERT(num_handles <= ZX_CHANNEL_MAX_MSG_HANDLES); |
| zx_handle_t handles[ZX_CHANNEL_MAX_MSG_HANDLES]; |
| for (size_t i = 0; i < num_handles; i++) { |
| handles[i] = handle_infos[i].handle; |
| } |
| return zx_handle_close_many(handles, num_handles); |
| #else |
| ZX_PANIC("handle closing not implemented on host"); |
| #endif // __Fuchsia__ |
| } |