Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(496)

Unified Diff: mojo/public/c/bindings/lib/struct.c

Issue 2232833003: Change the canonical way to include the C bindings headers to <mojo/bindings/*.h>. (Closed) Base URL: https://github.com/domokit/mojo.git@work791_mojo_tests
Patch Set: rebased Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/c/bindings/lib/message.c ('k') | mojo/public/c/bindings/lib/type_descriptor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/c/bindings/lib/struct.c
diff --git a/mojo/public/c/bindings/lib/struct.c b/mojo/public/c/bindings/lib/struct.c
deleted file mode 100644
index 611bfa73bafad09aa96e9b17273361d5732912c2..0000000000000000000000000000000000000000
--- a/mojo/public/c/bindings/lib/struct.c
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright 2016 The Chromium 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 "mojo/public/c/bindings/struct.h"
-
-#include <assert.h>
-#include <string.h>
-
-#include "mojo/public/c/bindings/lib/type_descriptor.h"
-#include "mojo/public/c/bindings/union.h"
-
-size_t MojomStruct_ComputeSerializedSize(
- const struct MojomTypeDescriptorStruct* in_type_desc,
- const struct MojomStructHeader* in_struct) {
- assert(in_struct);
- assert(in_type_desc);
-
- size_t size = in_struct->num_bytes;
- for (size_t i = 0; i < in_type_desc->num_entries; i++) {
- const struct MojomTypeDescriptorStructEntry* entry =
- &(in_type_desc->entries[i]);
-
- if (!MojomType_IsPointer(entry->elem_type) &&
- entry->elem_type != MOJOM_TYPE_DESCRIPTOR_TYPE_UNION)
- continue;
-
- if (in_struct->version < entry->min_version)
- continue;
-
- size += MojomType_DispatchComputeSerializedSize(
- entry->elem_type, entry->elem_descriptor, entry->nullable,
- (char*)in_struct + sizeof(struct MojomStructHeader) + entry->offset);
- }
- return size;
-}
-
-void MojomStruct_EncodePointersAndHandles(
- const struct MojomTypeDescriptorStruct* in_type_desc,
- struct MojomStructHeader* inout_struct,
- uint32_t in_struct_size,
- struct MojomHandleBuffer* inout_handles_buffer) {
- assert(in_type_desc);
- assert(inout_struct);
- assert(in_struct_size >= sizeof(struct MojomStructHeader));
-
- for (size_t i = 0; i < in_type_desc->num_entries; i++) {
- const struct MojomTypeDescriptorStructEntry* entry =
- &(in_type_desc->entries[i]);
-
- if (inout_struct->version < entry->min_version)
- continue;
-
- assert(sizeof(struct MojomStructHeader) + entry->offset < in_struct_size);
- void* elem_data = ((char*)inout_struct + sizeof(struct MojomStructHeader) +
- entry->offset);
-
- MojomType_DispatchEncodePointersAndHandles(
- entry->elem_type,
- entry->elem_descriptor,
- entry->nullable,
- elem_data,
- in_struct_size - ((char*)elem_data - (char*)inout_struct),
- inout_handles_buffer);
- }
-}
-
-void MojomStruct_DecodePointersAndHandles(
- const struct MojomTypeDescriptorStruct* in_type_desc,
- struct MojomStructHeader* inout_struct,
- uint32_t in_struct_size,
- MojoHandle* inout_handles,
- uint32_t in_num_handles) {
- assert(in_type_desc);
- assert(inout_struct);
- assert(inout_handles != NULL || in_num_handles == 0);
-
- for (size_t i = 0; i < in_type_desc->num_entries; i++) {
- const struct MojomTypeDescriptorStructEntry* entry =
- &(in_type_desc->entries[i]);
-
- if (inout_struct->version < entry->min_version)
- continue;
-
- assert(sizeof(struct MojomStructHeader) + entry->offset < in_struct_size);
- void* elem_data = ((char*)inout_struct + sizeof(struct MojomStructHeader) +
- entry->offset);
-
- MojomType_DispatchDecodePointersAndHandles(
- entry->elem_type,
- entry->elem_descriptor,
- entry->nullable,
- elem_data,
- in_struct_size - ((char*)elem_data - (char*)inout_struct),
- inout_handles,
- in_num_handles);
- }
-}
-
-static bool is_valid_size_for_version(
- const struct MojomStructHeader* in_struct,
- const struct MojomTypeDescriptorStructVersion versions[],
- uint32_t num_versions) {
- // Scan for a version size in reverse order (assuming structs are often newer
- // versions than old). Seek to the most recent version that |in_struct| is
- // compatible with.
- uint32_t i = num_versions - 1;
- for (; i > 0 && versions[i].version > in_struct->version; i--);
-
- if (in_struct->version == versions[i].version) {
- return in_struct->num_bytes == versions[i].num_bytes;
- } else {
- return in_struct->num_bytes >= versions[i].num_bytes;
- }
-}
-
-MojomValidationResult MojomStruct_Validate(
- const struct MojomTypeDescriptorStruct* in_type_desc,
- const struct MojomStructHeader* in_struct,
- uint32_t in_struct_size,
- uint32_t in_num_handles,
- struct MojomValidationContext* inout_context) {
- assert(in_type_desc);
- assert(in_struct);
-
- // Struct header validation.
- if (in_struct_size < sizeof(struct MojomStructHeader))
- return MOJOM_VALIDATION_ILLEGAL_MEMORY_RANGE;
-
- if (in_struct->num_bytes > in_struct_size)
- return MOJOM_VALIDATION_ILLEGAL_MEMORY_RANGE;
-
- if (!is_valid_size_for_version(in_struct, in_type_desc->versions,
- in_type_desc->num_versions)) {
- return MOJOM_VALIDATION_UNEXPECTED_STRUCT_HEADER;
- }
-
- if ((in_struct->num_bytes & 7) != 0)
- return MOJOM_VALIDATION_MISALIGNED_OBJECT;
-
- // From here on out, all pointers need to point past the end of this struct.
- inout_context->next_pointer = (char*)in_struct + in_struct->num_bytes;
-
- for (size_t i = 0; i < in_type_desc->num_entries; i++) {
- const struct MojomTypeDescriptorStructEntry* entry =
- &(in_type_desc->entries[i]);
-
- if (in_struct->version < entry->min_version)
- continue;
-
- void* elem_data = ((char*)in_struct + sizeof(struct MojomStructHeader) +
- entry->offset);
- MojomValidationResult result = MojomType_DispatchValidate(
- entry->elem_type,
- entry->elem_descriptor,
- entry->nullable,
- elem_data,
- in_struct_size - ((char*)elem_data - (char*)in_struct),
- in_num_handles,
- inout_context);
- if (result != MOJOM_VALIDATION_ERROR_NONE)
- return result;
- }
-
- return MOJOM_VALIDATION_ERROR_NONE;
-}
-
-bool MojomStruct_DeepCopy(
- struct MojomBuffer* buffer,
- const struct MojomTypeDescriptorStruct* in_type_desc,
- const struct MojomStructHeader* in_struct,
- struct MojomStructHeader** out_struct) {
- assert(in_type_desc);
- assert(in_struct);
- assert(out_struct);
-
- *out_struct = MojomBuffer_Allocate(buffer, in_struct->num_bytes);
- if (*out_struct == NULL)
- return false;
-
- memcpy(*out_struct, in_struct, in_struct->num_bytes);
-
- for (size_t i = 0; i < in_type_desc->num_entries; i++) {
- const struct MojomTypeDescriptorStructEntry* entry =
- &(in_type_desc->entries[i]);
-
- if (in_struct->version < entry->min_version)
- continue;
-
- void* in_elem_data =
- ((char*)in_struct + sizeof(struct MojomStructHeader) + entry->offset);
- void* out_elem_data = ((char*)*out_struct +
- sizeof(struct MojomStructHeader) + entry->offset);
- if (!MojomType_DispatchDeepCopy(
- buffer,
- entry->elem_type,
- entry->elem_descriptor,
- in_elem_data,
- out_elem_data)) {
- return false;
- }
- }
-
- return true;
-}
« no previous file with comments | « mojo/public/c/bindings/lib/message.c ('k') | mojo/public/c/bindings/lib/type_descriptor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698