Index: mojo/system/shared_buffer_dispatcher.cc |
diff --git a/mojo/system/shared_buffer_dispatcher.cc b/mojo/system/shared_buffer_dispatcher.cc |
index 1181b01b9155342719c3ad8f6c72b97521006a90..375ae7caf0f43199bed59c4bedee9126272a1f1d 100644 |
--- a/mojo/system/shared_buffer_dispatcher.cc |
+++ b/mojo/system/shared_buffer_dispatcher.cc |
@@ -35,20 +35,24 @@ const MojoCreateSharedBufferOptions |
// static |
MojoResult SharedBufferDispatcher::ValidateCreateOptions( |
- const MojoCreateSharedBufferOptions* in_options, |
+ UserPointer<const MojoCreateSharedBufferOptions> in_options, |
MojoCreateSharedBufferOptions* out_options) { |
const MojoCreateSharedBufferOptionsFlags kKnownFlags = |
MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE; |
*out_options = kDefaultCreateOptions; |
- if (!in_options) |
+ if (in_options.IsNull()) |
return MOJO_RESULT_OK; |
- MojoResult result = |
- ValidateOptionsStructPointerSizeAndFlags<MojoCreateSharedBufferOptions>( |
- in_options, kKnownFlags, out_options); |
- if (result != MOJO_RESULT_OK) |
- return result; |
+ UserOptionsReader<MojoCreateSharedBufferOptions> reader(in_options); |
+ if (!reader.is_valid()) |
+ return MOJO_RESULT_INVALID_ARGUMENT; |
+ |
+ if (!OPTIONS_STRUCT_HAS_MEMBER(MojoCreateSharedBufferOptions, flags, reader)) |
+ return MOJO_RESULT_OK; |
+ if ((reader.options().flags & ~kKnownFlags)) |
+ return MOJO_RESULT_UNIMPLEMENTED; |
+ out_options->flags = reader.options().flags; |
// Checks for fields beyond |flags|: |
@@ -140,7 +144,7 @@ SharedBufferDispatcher::~SharedBufferDispatcher() { |
// static |
MojoResult SharedBufferDispatcher::ValidateDuplicateOptions( |
- const MojoDuplicateBufferHandleOptions* in_options, |
+ UserPointer<const MojoDuplicateBufferHandleOptions> in_options, |
MojoDuplicateBufferHandleOptions* out_options) { |
const MojoDuplicateBufferHandleOptionsFlags kKnownFlags = |
MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE; |
@@ -150,15 +154,19 @@ MojoResult SharedBufferDispatcher::ValidateDuplicateOptions( |
}; |
*out_options = kDefaultOptions; |
- if (!in_options) |
+ if (in_options.IsNull()) |
return MOJO_RESULT_OK; |
- MojoResult result = |
- ValidateOptionsStructPointerSizeAndFlags< |
- MojoDuplicateBufferHandleOptions>( |
- in_options, kKnownFlags, out_options); |
- if (result != MOJO_RESULT_OK) |
- return result; |
+ UserOptionsReader<MojoDuplicateBufferHandleOptions> reader(in_options); |
+ if (!reader.is_valid()) |
+ return MOJO_RESULT_INVALID_ARGUMENT; |
+ |
+ if (!OPTIONS_STRUCT_HAS_MEMBER(MojoDuplicateBufferHandleOptions, flags, |
+ reader)) |
+ return MOJO_RESULT_OK; |
+ if ((reader.options().flags & ~kKnownFlags)) |
+ return MOJO_RESULT_UNIMPLEMENTED; |
+ out_options->flags = reader.options().flags; |
// Checks for fields beyond |flags|: |
@@ -183,7 +191,7 @@ scoped_refptr<Dispatcher> |
} |
MojoResult SharedBufferDispatcher::DuplicateBufferHandleImplNoLock( |
- const MojoDuplicateBufferHandleOptions* options, |
+ UserPointer<const MojoDuplicateBufferHandleOptions> options, |
scoped_refptr<Dispatcher>* new_dispatcher) { |
lock().AssertAcquired(); |