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