9 #include "ppapi/c/ppb_file_io.h"
10 #include "ppapi/c/pp_errors.h"
21 template <>
const char* interface_name<PPB_FileIO_1_0>() {
22 return PPB_FILEIO_INTERFACE_1_0;
25 template <>
const char* interface_name<PPB_FileIO_1_1>() {
26 return PPB_FILEIO_INTERFACE_1_1;
35 if (has_interface<PPB_FileIO_1_1>()) {
38 }
else if (has_interface<PPB_FileIO_1_0>()) {
51 if (has_interface<PPB_FileIO_1_1>()) {
52 return get_interface<PPB_FileIO_1_1>()->
Open(
55 }
else if (has_interface<PPB_FileIO_1_0>()) {
56 return get_interface<PPB_FileIO_1_0>()->
Open(
60 return cc.
MayForce(PP_ERROR_NOINTERFACE);
65 if (has_interface<PPB_FileIO_1_1>()) {
66 return get_interface<PPB_FileIO_1_1>()->
Query(
68 }
else if (has_interface<PPB_FileIO_1_0>()) {
69 return get_interface<PPB_FileIO_1_0>()->
Query(
72 return cc.
MayForce(PP_ERROR_NOINTERFACE);
76 PP_Time last_modified_time,
78 if (has_interface<PPB_FileIO_1_1>()) {
79 return get_interface<PPB_FileIO_1_1>()->
Touch(
80 pp_resource(), last_access_time, last_modified_time,
82 }
else if (has_interface<PPB_FileIO_1_0>()) {
83 return get_interface<PPB_FileIO_1_0>()->
Touch(
84 pp_resource(), last_access_time, last_modified_time,
87 return cc.
MayForce(PP_ERROR_NOINTERFACE);
94 if (has_interface<PPB_FileIO_1_1>()) {
97 }
else if (has_interface<PPB_FileIO_1_0>()) {
101 return cc.
MayForce(PP_ERROR_NOINTERFACE);
108 if (has_interface<PPB_FileIO_1_1>()) {
109 PP_ArrayOutput array_output = cc.output();
110 return get_interface<PPB_FileIO_1_1>()->ReadToArray(
pp_resource(),
111 offset, max_read_length, &array_output,
112 cc.pp_completion_callback());
113 }
else if (has_interface<PPB_FileIO_1_0>()) {
116 CallbackData1_0* data =
new CallbackData1_0;
117 data->output = cc.output();
118 data->temp_buffer = max_read_length >= 0 ?
new char[max_read_length] : NULL;
119 data->original_callback = cc.pp_completion_callback();
124 return get_interface<PPB_FileIO_1_0>()->
Read(
125 pp_resource(), offset, data->temp_buffer, max_read_length,
126 PP_MakeCompletionCallback(&CallbackConverter, data));
128 return cc.MayForce(PP_ERROR_NOINTERFACE);
135 if (has_interface<PPB_FileIO_1_1>()) {
136 return get_interface<PPB_FileIO_1_1>()->
Write(
139 }
else if (has_interface<PPB_FileIO_1_0>()) {
140 return get_interface<PPB_FileIO_1_0>()->
Write(
144 return cc.
MayForce(PP_ERROR_NOINTERFACE);
149 if (has_interface<PPB_FileIO_1_1>()) {
150 return get_interface<PPB_FileIO_1_1>()->
SetLength(
152 }
else if (has_interface<PPB_FileIO_1_0>()) {
153 return get_interface<PPB_FileIO_1_0>()->
SetLength(
156 return cc.
MayForce(PP_ERROR_NOINTERFACE);
160 if (has_interface<PPB_FileIO_1_1>()) {
161 return get_interface<PPB_FileIO_1_1>()->
Flush(
163 }
else if (has_interface<PPB_FileIO_1_0>()) {
164 return get_interface<PPB_FileIO_1_0>()->
Flush(
167 return cc.
MayForce(PP_ERROR_NOINTERFACE);
171 if (has_interface<PPB_FileIO_1_1>())
173 else if (has_interface<PPB_FileIO_1_0>())
174 get_interface<PPB_FileIO_1_0>()->Close(
pp_resource());
178 void FileIO::CallbackConverter(
void* user_data,
int32_t result) {
179 CallbackData1_0* data =
static_cast<CallbackData1_0*
>(user_data);
183 char* buffer =
static_cast<char*
>(data->output.GetDataBuffer(
184 data->output.user_data, result,
sizeof(
char)));
185 memcpy(buffer, data->temp_buffer, result);
186 delete[] data->temp_buffer;
190 PP_RunCompletionCallback(&data->original_callback, result);
void PassRefFromConstructor(PP_Resource resource)
The FileIO class represents a regular file.
int32_t MayForce(int32_t result) const
const PP_CompletionCallback & pp_completion_callback() const
int32_t Query(PP_FileInfo *result_buf, const CompletionCallback &cc)
int32_t Touch(PP_Time last_access_time, PP_Time last_modified_time, const CompletionCallback &cc)
int32_t Flush(const CompletionCallback &cc)
int32_t Write(int64_t offset, const char *buffer, int32_t bytes_to_write, const CompletionCallback &cc)
int32_t Read(int64_t offset, char *buffer, int32_t bytes_to_read, const CompletionCallback &cc)
int32_t SetLength(int64_t length, const CompletionCallback &cc)
int32_t Open(const FileRef &file_ref, int32_t open_flags, const CompletionCallback &cc)
PP_Resource pp_resource() const
PP_Instance pp_instance() const
A reference counted module resource.