blob: eef0a5b9ee73502f4c1dbf9fe506ccf8c8831cc0 [file] [log] [blame]
// Copyright 2019 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 "koid_util.h"
#include <zircon/assert.h>
#include <zircon/errors.h>
namespace sysmem_driver {
zx_status_t get_channel_koids(const zx::channel& this_end, zx_koid_t* this_end_koid,
zx_koid_t* that_end_koid) {
ZX_DEBUG_ASSERT(this_end_koid);
ZX_DEBUG_ASSERT(that_end_koid);
zx_info_handle_basic_t token_info{};
size_t actual_count = 0;
size_t avail_count = 0;
zx_status_t get_info_status = this_end.get_info(ZX_INFO_HANDLE_BASIC, &token_info,
sizeof(token_info), &actual_count, &avail_count);
if (get_info_status != ZX_OK) {
return get_info_status;
}
ZX_DEBUG_ASSERT(actual_count == 1);
ZX_DEBUG_ASSERT(avail_count == 1);
if (token_info.type != ZX_OBJ_TYPE_CHANNEL) {
return ZX_ERR_WRONG_TYPE;
}
ZX_DEBUG_ASSERT(token_info.koid != 0);
ZX_DEBUG_ASSERT(token_info.related_koid != 0);
*this_end_koid = token_info.koid;
*that_end_koid = token_info.related_koid;
return ZX_OK;
}
} // namespace sysmem_driver