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; |
-} |