1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17/* 18 * DESCRIPTION: 19 * The xpl_File.h header file contains constants and function prototypes 20 * for filesystem operations 21 */ 22 23#ifndef XPL_FILE_H 24#define XPL_FILE_H 25 26#include "xpl_Time.h" 27 28#ifdef __cplusplus 29extern "C" { 30#endif 31 32/************** CONSTANTS ****************************************************/ 33 34#define XPL_FS_MAX_FILE_NAME_LENGTH 255 35#define XPL_FS_SIZE_INVALID (0) 36#define XPL_FS_HANDLE_INVALID (-1) 37#define XPL_FS_SHANDLE_INVALID (-1) 38 39/************** STRUCTURES, ENUMS, AND TYPEDEFS ******************************/ 40 41typedef INT32 XPL_FS_HANDLE_T; 42typedef INT32 XPL_FS_SHANDLE_T; 43typedef INT32 XPL_FS_COUNT_T; 44typedef INT32 XPL_FS_SEEK_OFFSET_T; 45typedef UINT32 XPL_FS_SIZE_T; 46typedef char XPL_FS_SEARCH_FILE[XPL_FS_MAX_FILE_NAME_LENGTH]; 47 48/* This are internal flags */ 49enum 50{ 51 XPL_FS_RDONLY_MODE = 1, /* open for reading only */ 52 XPL_FS_WRONLY_MODE = 2, /* open for writing only */ 53 XPL_FS_TRUNC_MODE = 4, /* length is truncated to 0 */ 54 XPL_FS_CREAT_MODE = 8, /* create if file doesn't exist */ 55 XPL_FS_RDWR_MODE = 16, /* open for reading and writing */ 56 XPL_FS_APPEND_MODE= 32 /* offeset is set to the end of the file 57 * prior each write */ 58}; 59typedef UINT8 XPL_FS_OPEN_MODE_T; 60 61enum 62{ 63 XPL_FS_SEEK_SET =0, /* set offset to offset */ 64 XPL_FS_SEEK_CUR, /* set offset to current plus offset */ 65 XPL_FS_SEEK_END /* set fileoffset to EOF plus offset */ 66 }; 67typedef UINT8 XPL_FS_SEEK_MODE_T; 68 69enum 70{ 71 XPL_FS_RET_SUCCESS = 0, /* operation successfully completed */ 72 XPL_FS_RET_FAIL = 1, /* operation failed */ 73 XPL_FS_RET_TRYAGAIN = 2, /* try later */ 74 XPL_FS_RET_NOT_FOUND = 3, /* not found */ 75 XPL_FS_RET_BADARGUMENT = 4, /* bad argument */ 76 XPL_FS_RET_NOT_SUPPORTED = 5,/* not supported */ 77 XPL_FS_RET_PERM_FAIL = 6 /* permission failed */ 78 79}; 80typedef UINT8 XPL_FS_RET_STATUS_T; 81 82/************** CONSTANTS ****************************************************/ 83 84/*Thise are public used flags passed to XPL_FS_OpenFile */ 85#define XPL_FS_FILE_READ XPL_FS_RDONLY_MODE 86#define XPL_FS_FILE_WRITE (XPL_FS_WRONLY_MODE|XPL_FS_TRUNC_MODE|XPL_FS_CREAT_MODE) 87#define XPL_FS_FILE_RDWR (XPL_FS_RDWR_MODE|XPL_FS_CREAT_MODE) 88#define XPL_FS_FILE_APPEND (XPL_FS_WRONLY_MODE|XPL_FS_APPEND_MODE|XPL_FS_CREAT_MODE) 89 90/*================================================================================= 91 FUNCTION PROTOTYPES 92==================================================================================*/ 93/* Function returns an integer value, which is used to refer to the file. 94 * If un- successful, it returns -1, and sets the result to 95 * indicate the error type. */ 96XPL_FS_HANDLE_T XPL_FS_Open(CPCHAR file_uri, 97 const XPL_FS_OPEN_MODE_T open_mode, 98 XPL_FS_RET_STATUS_T * result); 99 100 101/* Function closes the file associated with handle. 102* The function returns 0 if successful, or error code set appropriately. */ 103XPL_FS_RET_STATUS_T XPL_FS_Close(XPL_FS_HANDLE_T file_handle); 104 105/* Function deletes file */ 106XPL_FS_RET_STATUS_T XPL_FS_Remove(CPCHAR path); 107 108/* Attempts to change name of a file */ 109XPL_FS_RET_STATUS_T XPL_FS_Rename(CPCHAR old_name, CPCHAR new_name); 110 111/* Returns TRUE if file with specified name exist */ 112BOOLEAN XPL_FS_Exist(CPCHAR match_uri); 113 114/* Returns TRUE if file has permission */ 115BOOLEAN XPL_FS_CheckPermission(CPCHAR match_uri, XPL_FS_OPEN_MODE_T permission); 116 117/* Returns file size */ 118XPL_FS_SIZE_T XPL_FS_GetSize(XPL_FS_HANDLE_T file_handle); 119 120/* Returns time of last modifiction */ 121XPL_CLK_CLOCK_T XPL_FS_GetModTime(CPCHAR file_uri); 122 123/*Function attempts to read count from the file associated with file_handle, 124* and places the characters read into buffer. 125* The function returns the number of bytes read. On end-of-file, 0 is returned, on error it returns -1 126* setting result to indicate the type of error that occurred */ 127XPL_FS_COUNT_T XPL_FS_Read(XPL_FS_HANDLE_T file_handle, 128 void* buffer, 129 const XPL_FS_COUNT_T count, 130 XPL_FS_RET_STATUS_T * result); 131 132/* Function attempts to write count of byte from buffer to the file associated with handle. 133* The function returns the count of bytes written to the file. 134* A return value of -1 indicates an error, with result set appropriately. */ 135XPL_FS_COUNT_T XPL_FS_Write(XPL_FS_HANDLE_T file_handle, 136 void* buffer, 137 const XPL_FS_COUNT_T count, 138 XPL_FS_RET_STATUS_T * result); 139 140/* Function shall set the file offset for the open file description associated with file_handle 141* Upon successful completion, the resulting offset, as measured in bytes from the beginning of 142* the file, shall be returned. Otherwise, -1 shall be returned, result shall be set to indicate the error. */ 143XPL_FS_SEEK_OFFSET_T XPL_FS_Seek(XPL_FS_HANDLE_T file_handle, 144 XPL_FS_SEEK_OFFSET_T offset, 145 XPL_FS_SEEK_MODE_T whence, 146 XPL_FS_RET_STATUS_T * result); 147 148 149/* Functionon search files in the directory and returns handler of search results */ 150XPL_FS_SHANDLE_T XPL_FS_StartSearch(CPCHAR dir_uri, 151 CPCHAR extension, 152 BOOLEAN bFullName, 153 XPL_FS_RET_STATUS_T * result); 154 155/* Returns result of search. */ 156XPL_FS_RET_STATUS_T XPL_FS_GetSearchResult(XPL_FS_SHANDLE_T search_handle, 157 XPL_FS_SEARCH_FILE file_name); 158 159/* Closes search */ 160XPL_FS_RET_STATUS_T XPL_FS_EndSearch(XPL_FS_SHANDLE_T dir_handle); 161 162/* Attempts to create the directory. */ 163XPL_FS_RET_STATUS_T XPL_FS_MkDir(CPCHAR dir_uri); 164 165/* locks the open file */ 166XPL_FS_RET_STATUS_T XPL_FS_Lock(XPL_FS_HANDLE_T file_handle, BOOLEAN bLockExclusive ); 167 168/* unlocks file */ 169XPL_FS_RET_STATUS_T XPL_FS_Unlock(XPL_FS_HANDLE_T file_handle); 170 171/* unlinks file */ 172XPL_FS_RET_STATUS_T XPL_FS_Unlink(CPCHAR name); 173 174 175/* establishes a mapping between a process address space and a file for read only operation. */ 176UINT8 * XPL_FS_MemMap(XPL_FS_HANDLE_T file_handle, UINT32 size, UINT32 offset, XPL_FS_RET_STATUS_T * result); 177 178/* cancel mapping between a process address space and a file */ 179XPL_FS_RET_STATUS_T XPL_FS_MemUnMap(UINT8 * pBuffer, UINT32 size); 180#ifdef LOB_SUPPORT 181/* Return the temporary ESN file directory */ 182CPCHAR XPL_FS_TempEsnDir(); 183/* Return free disk space */ 184XPL_FS_SIZE_T XPL_FS_FreeDiskSpace(CPCHAR pEsnDir); 185#endif 186 187#ifdef __cplusplus 188} 189#endif 190 191#endif /* XPL_FILE_H */ 192