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