1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
|
/* Copyright 2012 The Chromium Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/* From ppb_file_io.idl modified Tue Oct 22 15:09:47 2013. */
#ifndef PPAPI_C_PPB_FILE_IO_H_
#define PPAPI_C_PPB_FILE_IO_H_
#include "ppapi/c/pp_array_output.h"
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_completion_callback.h"
#include "ppapi/c/pp_file_info.h"
#include "ppapi/c/pp_instance.h"
#include "ppapi/c/pp_macros.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_stdint.h"
#include "ppapi/c/pp_time.h"
#define PPB_FILEIO_INTERFACE_1_0 "PPB_FileIO;1.0"
#define PPB_FILEIO_INTERFACE_1_1 "PPB_FileIO;1.1"
#define PPB_FILEIO_INTERFACE PPB_FILEIO_INTERFACE_1_1
/**
* @file
* This file defines the API to create a file i/o object.
*/
/**
* @addtogroup Enums
* @{
*/
/**
* The PP_FileOpenFlags enum contains file open constants.
*/
typedef enum {
/** Requests read access to a file. */
PP_FILEOPENFLAG_READ = 1 << 0,
/**
* Requests write access to a file. May be combined with
* <code>PP_FILEOPENFLAG_READ</code> to request read and write access.
*/
PP_FILEOPENFLAG_WRITE = 1 << 1,
/**
* Requests that the file be created if it does not exist. If the file
* already exists, then this flag is ignored unless
* <code>PP_FILEOPENFLAG_EXCLUSIVE</code> was also specified, in which case
* FileIO::Open() will fail.
*/
PP_FILEOPENFLAG_CREATE = 1 << 2,
/**
* Requests that the file be truncated to length 0 if it exists and is a
* regular file. <code>PP_FILEOPENFLAG_WRITE</code> must also be specified.
*/
PP_FILEOPENFLAG_TRUNCATE = 1 << 3,
/**
* Requests that the file is created when this flag is combined with
* <code>PP_FILEOPENFLAG_CREATE</code>. If this flag is specified, and the
* file already exists, then the FileIO::Open() call will fail.
*/
PP_FILEOPENFLAG_EXCLUSIVE = 1 << 4,
/**
* Requests write access to a file, but writes will always occur at the end of
* the file. Mututally exclusive with <code>PP_FILEOPENFLAG_WRITE</code>.
*
* This is only supported in version 1.2 (Chrome 29) and later.
*/
PP_FILEOPENFLAG_APPEND = 1 << 5
} PP_FileOpenFlags;
PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FileOpenFlags, 4);
/**
* @}
*/
/**
* @addtogroup Interfaces
* @{
*/
/**
* The <code>PPB_FileIO</code> struct is used to operate on a regular file
* (PP_FileType_Regular).
*/
struct PPB_FileIO_1_1 {
/**
* Create() creates a new FileIO object.
*
* @param[in] instance A <code>PP_Instance</code> identifying the instance
* with the file.
*
* @return A <code>PP_Resource</code> corresponding to a FileIO if
* successful or 0 if the module is invalid.
*/
PP_Resource (*Create)(PP_Instance instance);
/**
* IsFileIO() determines if the provided resource is a FileIO.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to a FileIO.
*
* @return <code>PP_TRUE</code> if the resource is a
* <code>PPB_FileIO</code>, <code>PP_FALSE</code> if the resource is
* invalid or some type other than <code>PPB_FileIO</code>.
*/
PP_Bool (*IsFileIO)(PP_Resource resource);
/**
* Open() opens the specified regular file for I/O according to the given
* open flags, which is a bit-mask of the <code>PP_FileOpenFlags</code>
* values. Upon success, the corresponding file is classified as "in use"
* by this FileIO object until such time as the FileIO object is closed
* or destroyed.
*
* @param[in] file_io A <code>PP_Resource</code> corresponding to a
* FileIO.
* @param[in] file_ref A <code>PP_Resource</code> corresponding to a file
* reference.
* @param[in] open_flags A bit-mask of the <code>PP_FileOpenFlags</code>
* values.
* @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
* completion of Open().
*
* @return An int32_t containing an error code from <code>pp_errors.h</code>.
*/
int32_t (*Open)(PP_Resource file_io,
PP_Resource file_ref,
int32_t open_flags,
struct PP_CompletionCallback callback);
/**
* Query() queries info about the file opened by this FileIO object. The
* FileIO object must be opened, and there must be no other operations
* pending.
*
* @param[in] file_io A <code>PP_Resource</code> corresponding to a
* FileIO.
* @param[out] info The <code>PP_FileInfo</code> structure representing all
* information about the file.
* @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
* completion of Query(). <code>info</code> must remain valid until after the
* callback runs. If you pass a blocking callback, <code>info</code> must
* remain valid until after Query() returns.
*
* @return An int32_t containing an error code from <code>pp_errors.h</code>.
* PP_ERROR_FAILED will be returned if the file isn't opened, and
* PP_ERROR_INPROGRESS will be returned if there is another operation pending.
*/
int32_t (*Query)(PP_Resource file_io,
struct PP_FileInfo* info,
struct PP_CompletionCallback callback);
/**
* Touch() Updates time stamps for the file opened by this FileIO object.
* This function will fail if the FileIO object has not been opened. The
* FileIO object must be opened, and there must be no other operations
* pending.
*
* @param[in] file_io A <code>PP_Resource</code> corresponding to a file
* FileIO.
* @param[in] last_access_time The last time the FileIO was accessed.
* @param[in] last_modified_time The last time the FileIO was modified.
* @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
* completion of Touch().
*
* @return An int32_t containing an error code from <code>pp_errors.h</code>.
* PP_ERROR_FAILED will be returned if the file isn't opened, and
* PP_ERROR_INPROGRESS will be returned if there is another operation pending.
*/
int32_t (*Touch)(PP_Resource file_io,
PP_Time last_access_time,
PP_Time last_modified_time,
struct PP_CompletionCallback callback);
/**
* Read() reads from an offset in the file. The size of the buffer must be
* large enough to hold the specified number of bytes to read. This function
* might perform a partial read, meaning all the requested bytes
* might not be returned, even if the end of the file has not been reached.
* The FileIO object must have been opened with read access.
*
* ReadToArray() is preferred to Read() when doing asynchronous operations.
*
* @param[in] file_io A <code>PP_Resource</code> corresponding to a file
* FileIO.
* @param[in] offset The offset into the file.
* @param[in] buffer The buffer to hold the specified number of bytes read.
* @param[in] bytes_to_read The number of bytes to read from
* <code>offset</code>.
* @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
* completion of Read(). <code>buffer</code> must remain valid until after
* the callback runs. If you pass a blocking callback, <code>buffer</code>
* must remain valid until after Read() returns.
*
* @return The number of bytes read or an error code from
* <code>pp_errors.h</code>. If the return value is 0, then end-of-file was
* reached. It is valid to call Read() multiple times with a completion
* callback to queue up parallel reads from the file, but pending reads
* cannot be interleaved with other operations.
*/
int32_t (*Read)(PP_Resource file_io,
int64_t offset,
char* buffer,
int32_t bytes_to_read,
struct PP_CompletionCallback callback);
/**
* Write() writes to an offset in the file. This function might perform a
* partial write. The FileIO object must have been opened with write access.
*
* @param[in] file_io A <code>PP_Resource</code> corresponding to a file
* FileIO.
* @param[in] offset The offset into the file.
* @param[in] buffer The buffer to hold the specified number of bytes read.
* @param[in] bytes_to_write The number of bytes to write to
* <code>offset</code>.
* @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
* completion of Write().
*
* @return The number of bytes written or an error code from
* <code>pp_errors.h</code>. If the return value is 0, then end-of-file was
* reached. It is valid to call Write() multiple times with a completion
* callback to queue up parallel writes to the file, but pending writes
* cannot be interleaved with other operations.
*/
int32_t (*Write)(PP_Resource file_io,
int64_t offset,
const char* buffer,
int32_t bytes_to_write,
struct PP_CompletionCallback callback);
/**
* SetLength() sets the length of the file. If the file size is extended,
* then the extended area of the file is zero-filled. The FileIO object must
* have been opened with write access and there must be no other operations
* pending.
*
* @param[in] file_io A <code>PP_Resource</code> corresponding to a file
* FileIO.
* @param[in] length The length of the file to be set.
* @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
* completion of SetLength().
*
* @return An int32_t containing an error code from <code>pp_errors.h</code>.
* PP_ERROR_FAILED will be returned if the file isn't opened, and
* PP_ERROR_INPROGRESS will be returned if there is another operation pending.
*/
int32_t (*SetLength)(PP_Resource file_io,
int64_t length,
struct PP_CompletionCallback callback);
/**
* Flush() flushes changes to disk. This call can be very expensive! The
* FileIO object must have been opened with write access and there must be no
* other operations pending.
*
* @param[in] file_io A <code>PP_Resource</code> corresponding to a file
* FileIO.
* @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
* completion of Flush().
*
* @return An int32_t containing an error code from <code>pp_errors.h</code>.
* PP_ERROR_FAILED will be returned if the file isn't opened, and
* PP_ERROR_INPROGRESS will be returned if there is another operation pending.
*/
int32_t (*Flush)(PP_Resource file_io, struct PP_CompletionCallback callback);
/**
* Close() cancels any IO that may be pending, and closes the FileIO object.
* Any pending callbacks will still run, reporting
* <code>PP_ERROR_ABORTED</code> if pending IO was interrupted. It is not
* valid to call Open() again after a call to this method.
* <strong>Note:</strong> If the FileIO object is destroyed, and it is still
* open, then it will be implicitly closed, so you are not required to call
* Close().
*
* @param[in] file_io A <code>PP_Resource</code> corresponding to a file
* FileIO.
*/
void (*Close)(PP_Resource file_io);
/**
* ReadToArray() reads from an offset in the file. A PP_ArrayOutput must be
* provided so that output will be stored in its allocated buffer. This
* function might perform a partial read. The FileIO object must have been
* opened with read access.
*
* @param[in] file_io A <code>PP_Resource</code> corresponding to a file
* FileIO.
* @param[in] offset The offset into the file.
* @param[in] max_read_length The maximum number of bytes to read from
* <code>offset</code>.
* @param[in] output A <code>PP_ArrayOutput</code> to hold the output data.
* @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
* completion of ReadToArray().
*
* @return The number of bytes read or an error code from
* <code>pp_errors.h</code>. If the return value is 0, then end-of-file was
* reached. It is valid to call ReadToArray() multiple times with a completion
* callback to queue up parallel reads from the file, but pending reads
* cannot be interleaved with other operations.
*/
int32_t (*ReadToArray)(PP_Resource file_io,
int64_t offset,
int32_t max_read_length,
struct PP_ArrayOutput* output,
struct PP_CompletionCallback callback);
};
typedef struct PPB_FileIO_1_1 PPB_FileIO;
struct PPB_FileIO_1_0 {
PP_Resource (*Create)(PP_Instance instance);
PP_Bool (*IsFileIO)(PP_Resource resource);
int32_t (*Open)(PP_Resource file_io,
PP_Resource file_ref,
int32_t open_flags,
struct PP_CompletionCallback callback);
int32_t (*Query)(PP_Resource file_io,
struct PP_FileInfo* info,
struct PP_CompletionCallback callback);
int32_t (*Touch)(PP_Resource file_io,
PP_Time last_access_time,
PP_Time last_modified_time,
struct PP_CompletionCallback callback);
int32_t (*Read)(PP_Resource file_io,
int64_t offset,
char* buffer,
int32_t bytes_to_read,
struct PP_CompletionCallback callback);
int32_t (*Write)(PP_Resource file_io,
int64_t offset,
const char* buffer,
int32_t bytes_to_write,
struct PP_CompletionCallback callback);
int32_t (*SetLength)(PP_Resource file_io,
int64_t length,
struct PP_CompletionCallback callback);
int32_t (*Flush)(PP_Resource file_io, struct PP_CompletionCallback callback);
void (*Close)(PP_Resource file_io);
};
/**
* @}
*/
#endif /* PPAPI_C_PPB_FILE_IO_H_ */
|