15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)/* From ppb_file_io.idl modified Tue Oct 22 15:09:47 2013. */
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_C_PPB_FILE_IO_H_
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_C_PPB_FILE_IO_H_
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_array_output.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_bool.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_completion_callback.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_file_info.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_instance.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_macros.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_resource.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_stdint.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_time.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPB_FILEIO_INTERFACE_1_0 "PPB_FileIO;1.0"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define PPB_FILEIO_INTERFACE_1_1 "PPB_FileIO;1.1"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define PPB_FILEIO_INTERFACE PPB_FILEIO_INTERFACE_1_1
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @file
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This file defines the API to create a file i/o object.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @addtogroup Enums
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @{
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The PP_FileOpenFlags enum contains file open constants.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef enum {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /** Requests read access to a file. */
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_FILEOPENFLAG_READ = 1 << 0,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Requests write access to a file.  May be combined with
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_FILEOPENFLAG_READ</code> to request read and write access.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_FILEOPENFLAG_WRITE = 1 << 1,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Requests that the file be created if it does not exist.  If the file
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * already exists, then this flag is ignored unless
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_FILEOPENFLAG_EXCLUSIVE</code> was also specified, in which case
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO::Open() will fail.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_FILEOPENFLAG_CREATE = 1 << 2,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Requests that the file be truncated to length 0 if it exists and is a
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * regular file. <code>PP_FILEOPENFLAG_WRITE</code> must also be specified.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_FILEOPENFLAG_TRUNCATE = 1 << 3,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Requests that the file is created when this flag is combined with
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_FILEOPENFLAG_CREATE</code>.  If this flag is specified, and the
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * file already exists, then the FileIO::Open() call will fail.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  PP_FILEOPENFLAG_EXCLUSIVE = 1 << 4,
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  /**
657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)   * Requests write access to a file, but writes will always occur at the end of
667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)   * the file. Mututally exclusive with <code>PP_FILEOPENFLAG_WRITE</code>.
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)   *
687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)   * This is only supported in version 1.2 (Chrome 29) and later.
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)   */
707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  PP_FILEOPENFLAG_APPEND = 1 << 5
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} PP_FileOpenFlags;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FileOpenFlags, 4);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @addtogroup Interfaces
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @{
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The <code>PPB_FileIO</code> struct is used to operate on a regular file
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (PP_FileType_Regular).
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct PPB_FileIO_1_1 {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Create() creates a new FileIO object.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] instance A <code>PP_Instance</code> identifying the instance
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * with the file.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Resource</code> corresponding to a FileIO if
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * successful or 0 if the module is invalid.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Resource (*Create)(PP_Instance instance);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * IsFileIO() determines if the provided resource is a FileIO.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a FileIO.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return <code>PP_TRUE</code> if the resource is a
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PPB_FileIO</code>, <code>PP_FALSE</code> if the resource is
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * invalid or some type other than <code>PPB_FileIO</code>.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool (*IsFileIO)(PP_Resource resource);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Open() opens the specified regular file for I/O according to the given
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * open flags, which is a bit-mask of the <code>PP_FileOpenFlags</code>
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * values. Upon success, the corresponding file is classified as "in use"
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * by this FileIO object until such time as the FileIO object is closed
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * or destroyed.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] file_io A <code>PP_Resource</code> corresponding to a
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] file_ref A <code>PP_Resource</code> corresponding to a file
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * reference.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] open_flags A bit-mask of the <code>PP_FileOpenFlags</code>
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * values.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * completion of Open().
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An int32_t containing an error code from <code>pp_errors.h</code>.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*Open)(PP_Resource file_io,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  PP_Resource file_ref,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  int32_t open_flags,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  struct PP_CompletionCallback callback);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Query() queries info about the file opened by this FileIO object. The
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO object must be opened, and there must be no other operations
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * pending.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] file_io A <code>PP_Resource</code> corresponding to a
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO.
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[out] info The <code>PP_FileInfo</code> structure representing all
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * information about the file.
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   * completion of Query(). <code>info</code> must remain valid until after the
1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   * callback runs. If you pass a blocking callback, <code>info</code> must
1401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   * remain valid until after Query() returns.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An int32_t containing an error code from <code>pp_errors.h</code>.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * PP_ERROR_FAILED will be returned if the file isn't opened, and
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * PP_ERROR_INPROGRESS will be returned if there is another operation pending.
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*Query)(PP_Resource file_io,
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   struct PP_FileInfo* info,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   struct PP_CompletionCallback callback);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Touch() Updates time stamps for the file opened by this FileIO object.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * This function will fail if the FileIO object has not been opened. The
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO object must be opened, and there must be no other operations
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * pending.
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] file_io A <code>PP_Resource</code> corresponding to a file
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] last_access_time The last time the FileIO was accessed.
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] last_modified_time The last time the FileIO was modified.
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * completion of Touch().
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An int32_t containing an error code from <code>pp_errors.h</code>.
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * PP_ERROR_FAILED will be returned if the file isn't opened, and
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * PP_ERROR_INPROGRESS will be returned if there is another operation pending.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*Touch)(PP_Resource file_io,
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   PP_Time last_access_time,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   PP_Time last_modified_time,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   struct PP_CompletionCallback callback);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Read() reads from an offset in the file.  The size of the buffer must be
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * large enough to hold the specified number of bytes to read.  This function
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * might perform a partial read, meaning all the requested bytes
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * might not be returned, even if the end of the file has not been reached.
1751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   * The FileIO object must have been opened with read access.
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   *
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * ReadToArray() is preferred to Read() when doing asynchronous operations.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] file_io A <code>PP_Resource</code> corresponding to a file
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO.
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] offset The offset into the file.
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] buffer The buffer to hold the specified number of bytes read.
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] bytes_to_read The number of bytes to read from
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>offset</code>.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
1861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   * completion of Read(). <code>buffer</code> must remain valid until after
1871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   * the callback runs. If you pass a blocking callback, <code>buffer</code>
1881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   * must remain valid until after Read() returns.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return The number of bytes read or an error code from
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>pp_errors.h</code>. If the return value is 0, then end-of-file was
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * reached. It is valid to call Read() multiple times with a completion
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * callback to queue up parallel reads from the file, but pending reads
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * cannot be interleaved with other operations.
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*Read)(PP_Resource file_io,
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  int64_t offset,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  char* buffer,
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  int32_t bytes_to_read,
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  struct PP_CompletionCallback callback);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Write() writes to an offset in the file.  This function might perform a
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * partial write. The FileIO object must have been opened with write access.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] file_io A <code>PP_Resource</code> corresponding to a file
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] offset The offset into the file.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] buffer The buffer to hold the specified number of bytes read.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] bytes_to_write The number of bytes to write to
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>offset</code>.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * completion of Write().
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return The number of bytes written or an error code from
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>pp_errors.h</code>. If the return value is 0, then end-of-file was
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * reached. It is valid to call Write() multiple times with a completion
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * callback to queue up parallel writes to the file, but pending writes
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * cannot be interleaved with other operations.
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*Write)(PP_Resource file_io,
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   int64_t offset,
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const char* buffer,
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   int32_t bytes_to_write,
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   struct PP_CompletionCallback callback);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * SetLength() sets the length of the file.  If the file size is extended,
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * then the extended area of the file is zero-filled. The FileIO object must
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * have been opened with write access and there must be no other operations
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * pending.
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] file_io A <code>PP_Resource</code> corresponding to a file
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO.
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] length The length of the file to be set.
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * completion of SetLength().
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An int32_t containing an error code from <code>pp_errors.h</code>.
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * PP_ERROR_FAILED will be returned if the file isn't opened, and
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * PP_ERROR_INPROGRESS will be returned if there is another operation pending.
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*SetLength)(PP_Resource file_io,
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       int64_t length,
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       struct PP_CompletionCallback callback);
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Flush() flushes changes to disk.  This call can be very expensive! The
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO object must have been opened with write access and there must be no
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * other operations pending.
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] file_io A <code>PP_Resource</code> corresponding to a file
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO.
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * completion of Flush().
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An int32_t containing an error code from <code>pp_errors.h</code>.
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * PP_ERROR_FAILED will be returned if the file isn't opened, and
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * PP_ERROR_INPROGRESS will be returned if there is another operation pending.
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*Flush)(PP_Resource file_io, struct PP_CompletionCallback callback);
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Close() cancels any IO that may be pending, and closes the FileIO object.
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Any pending callbacks will still run, reporting
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_ERROR_ABORTED</code> if pending IO was interrupted.  It is not
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * valid to call Open() again after a call to this method.
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <strong>Note:</strong> If the FileIO object is destroyed, and it is still
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * open, then it will be implicitly closed, so you are not required to call
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Close().
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] file_io A <code>PP_Resource</code> corresponding to a file
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FileIO.
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void (*Close)(PP_Resource file_io);
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /**
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * ReadToArray() reads from an offset in the file.  A PP_ArrayOutput must be
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * provided so that output will be stored in its allocated buffer.  This
2751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   * function might perform a partial read. The FileIO object must have been
2761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   * opened with read access.
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   *
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[in] file_io A <code>PP_Resource</code> corresponding to a file
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * FileIO.
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[in] offset The offset into the file.
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[in] max_read_length The maximum number of bytes to read from
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * <code>offset</code>.
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[in] output A <code>PP_ArrayOutput</code> to hold the output data.
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to be called upon
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * completion of ReadToArray().
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   *
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * @return The number of bytes read or an error code from
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * <code>pp_errors.h</code>. If the return value is 0, then end-of-file was
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * reached. It is valid to call ReadToArray() multiple times with a completion
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * callback to queue up parallel reads from the file, but pending reads
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   * cannot be interleaved with other operations.
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   */
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int32_t (*ReadToArray)(PP_Resource file_io,
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         int64_t offset,
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         int32_t max_read_length,
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         struct PP_ArrayOutput* output,
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         struct PP_CompletionCallback callback);
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef struct PPB_FileIO_1_1 PPB_FileIO;
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct PPB_FileIO_1_0 {
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PP_Resource (*Create)(PP_Instance instance);
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PP_Bool (*IsFileIO)(PP_Resource resource);
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int32_t (*Open)(PP_Resource file_io,
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  PP_Resource file_ref,
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  int32_t open_flags,
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  struct PP_CompletionCallback callback);
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int32_t (*Query)(PP_Resource file_io,
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   struct PP_FileInfo* info,
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   struct PP_CompletionCallback callback);
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int32_t (*Touch)(PP_Resource file_io,
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   PP_Time last_access_time,
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   PP_Time last_modified_time,
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   struct PP_CompletionCallback callback);
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int32_t (*Read)(PP_Resource file_io,
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  int64_t offset,
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  char* buffer,
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  int32_t bytes_to_read,
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  struct PP_CompletionCallback callback);
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int32_t (*Write)(PP_Resource file_io,
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   int64_t offset,
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   const char* buffer,
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   int32_t bytes_to_write,
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   struct PP_CompletionCallback callback);
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int32_t (*SetLength)(PP_Resource file_io,
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       int64_t length,
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       struct PP_CompletionCallback callback);
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int32_t (*Flush)(PP_Resource file_io, struct PP_CompletionCallback callback);
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void (*Close)(PP_Resource file_io);
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @}
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  /* PPAPI_C_PPB_FILE_IO_H_ */
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
338