FwdLockConv.h revision fdd65a0fc7df2c878cc601e4c0f4021cb264f051
16cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/* 26cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Copyright (C) 2010 The Android Open Source Project 36cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * 46cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 56cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * you may not use this file except in compliance with the License. 66cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * You may obtain a copy of the License at 76cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * 86cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 96cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * 106cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Unless required by applicable law or agreed to in writing, software 116cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 126cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * See the License for the specific language governing permissions and 146cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * limitations under the License. 156cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian */ 166cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 176cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian#ifndef __FWDLOCKCONV_H__ 18870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian#define __FWDLOCKCONV_H__ 19870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian 206cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian#ifdef __cplusplus 21870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopianextern "C" { 22870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian#endif 236cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 24870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian#include <sys/types.h> 25870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian 266cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/** 276cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * The size of the data and header signatures combined. The signatures are adjacent to each other in 286cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * the produced output file. 296cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian */ 306cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian#define FWD_LOCK_SIGNATURES_SIZE (2 * 20) 316cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 326cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/** 33870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian * Data type for the output from FwdLockConv_ConvertData. 34870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian */ 35870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopiantypedef struct FwdLockConv_ConvertData_Output { 36870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian /// The converted data. 37870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian void *pBuffer; 38870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian 39870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian /// The size of the converted data. 40870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian size_t numBytes; 41870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian 42870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian /// The file position where the error occurred, in the case of a syntax error. 43870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian off64_t errorPos; 44870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian} FwdLockConv_ConvertData_Output_t; 45870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian 46870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian/** 47870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian * Data type for the output from FwdLockConv_CloseSession. 48870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian */ 49870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopiantypedef struct FwdLockConv_CloseSession_Output { 50870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian /// The final set of signatures. 51870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian unsigned char signatures[FWD_LOCK_SIGNATURES_SIZE]; 52870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian 53870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian /// The offset in the produced output file where the signatures are located. 548c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian off64_t fileOffset; 558c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian 568c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian /// The file position where the error occurred, in the case of a syntax error. 578c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian off64_t errorPos; 588c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian} FwdLockConv_CloseSession_Output_t; 598c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian 608c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian/** 618c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * Data type for the output from the conversion process. 628c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian */ 638c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopiantypedef union FwdLockConv_Output { 648c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian FwdLockConv_ConvertData_Output_t fromConvertData; 658c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian FwdLockConv_CloseSession_Output_t fromCloseSession; 668c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian} FwdLockConv_Output_t; 678c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian 688c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian/** 698c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * Data type for the Posix-style read function used by the converter in pull mode. 708c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * 718c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * @param[in] fileDesc The file descriptor of a file opened for reading. 728c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * @param[out] pBuffer A reference to the buffer that should receive the read data. 738c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * @param[in] numBytes The number of bytes to read. 748c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * 758c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * @return The number of bytes read. 766cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * @retval -1 Failure. 776cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian */ 786cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopiantypedef ssize_t FwdLockConv_ReadFunc_t(int fileDesc, void *pBuffer, size_t numBytes); 79870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian 806cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/** 816cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Data type for the Posix-style write function used by the converter in pull mode. 826cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * 836cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * @param[in] fileDesc The file descriptor of a file opened for writing. 8442db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian * @param[in] pBuffer A reference to the buffer containing the data to be written. 8542db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian * @param[in] numBytes The number of bytes to write. 8642db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian * 876cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * @return The number of bytes written. 886cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * @retval -1 Failure. 89870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian */ 906cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopiantypedef ssize_t FwdLockConv_WriteFunc_t(int fileDesc, const void *pBuffer, size_t numBytes); 91f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian 926cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/** 936cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Data type for the Posix-style lseek function used by the converter in pull mode. 94f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * 95f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * @param[in] fileDesc The file descriptor of a file opened for writing. 96f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * @param[in] offset The offset with which to update the file position. 97f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * @param[in] whence One of SEEK_SET, SEEK_CUR, and SEEK_END. 98f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * 99870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian * @return The new file position. 100f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * @retval ((off64_t)-1) Failure. 101f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian */ 102f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopiantypedef off64_t FwdLockConv_LSeekFunc_t(int fileDesc, off64_t offset, int whence); 103f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian 104f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian/** 105f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * The status codes returned by the converter functions. 106d5ea3db6a3049d6b66a619be08002e90aa38f99fMathias Agopian */ 1076cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopiantypedef enum FwdLockConv_Status { 1086cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian /// The operation was successful. 109f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian FwdLockConv_Status_OK = 0, 1106cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 111f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian /// An actual argument to the function is invalid (a program error on the caller's part). 112870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian FwdLockConv_Status_InvalidArgument = 1, 113f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian 114f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian /// There is not enough free dynamic memory to complete the operation. 115f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian FwdLockConv_Status_OutOfMemory = 2, 1166cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 1176cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian /// An error occurred while opening the input file. 1186cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian FwdLockConv_Status_FileNotFound = 3, 1196cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 1206cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian /// An error occurred while creating the output file. 1216cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian FwdLockConv_Status_FileCreationFailed = 4, 1226cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 1236cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian /// An error occurred while reading from the input file. 1246cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian FwdLockConv_Status_FileReadError = 5, 1256cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 1266cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian /// An error occurred while writing to the output file. 1276cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian FwdLockConv_Status_FileWriteError = 6, 1286cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 129870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian /// An error occurred while seeking to a new file position within the output file. 13042db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian FwdLockConv_Status_FileSeekError = 7, 13142db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian 132870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian /// The input file is not a syntactically correct OMA DRM v1 Forward Lock file. 1336cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian FwdLockConv_Status_SyntaxError = 8, 1346cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 1356cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian /// Support for this DRM file format has been disabled in the current product configuration. 1366cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian FwdLockConv_Status_UnsupportedFileFormat = 9, 1376cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 1386cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian /// The content transfer encoding is not one of "binary", "base64", "7bit", or "8bit" 1396cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian /// (case-insensitive). 1406cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian FwdLockConv_Status_UnsupportedContentTransferEncoding = 10, 1416cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian 1426cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian /// The generation of a random number failed. 143870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian FwdLockConv_Status_RandomNumberGenerationFailed = 11, 144870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian 145 /// Key encryption failed. 146 FwdLockConv_Status_KeyEncryptionFailed = 12, 147 148 /// The calculation of a keyed hash for integrity protection failed. 149 FwdLockConv_Status_IntegrityProtectionFailed = 13, 150 151 /// There are too many ongoing sessions for another one to be opened. 152 FwdLockConv_Status_TooManySessions = 14, 153 154 /// An unexpected error occurred. 155 FwdLockConv_Status_ProgramError = 15 156} FwdLockConv_Status_t; 157 158/** 159 * Opens a session for converting an OMA DRM v1 Forward Lock file to the internal Forward Lock file 160 * format. 161 * 162 * @param[out] pSessionId The session ID. 163 * @param[out] pOutput The output from the conversion process (initialized). 164 * 165 * @return A status code. 166 * @retval FwdLockConv_Status_OK 167 * @retval FwdLockConv_Status_InvalidArgument 168 * @retval FwdLockConv_Status_TooManySessions 169 */ 170FwdLockConv_Status_t FwdLockConv_OpenSession(int *pSessionId, FwdLockConv_Output_t *pOutput); 171 172/** 173 * Supplies the converter with data to convert. The caller is expected to write the converted data 174 * to file. Can be called an arbitrary number of times. 175 * 176 * @param[in] sessionId The session ID. 177 * @param[in] pBuffer A reference to a buffer containing the data to convert. 178 * @param[in] numBytes The number of bytes to convert. 179 * @param[in,out] pOutput The output from the conversion process (allocated/reallocated). 180 * 181 * @return A status code. 182 * @retval FwdLockConv_Status_OK 183 * @retval FwdLockConv_Status_InvalidArgument 184 * @retval FwdLockConv_Status_OutOfMemory 185 * @retval FwdLockConv_Status_SyntaxError 186 * @retval FwdLockConv_Status_UnsupportedFileFormat 187 * @retval FwdLockConv_Status_UnsupportedContentTransferEncoding 188 * @retval FwdLockConv_Status_RandomNumberGenerationFailed 189 * @retval FwdLockConv_Status_KeyEncryptionFailed 190 * @retval FwdLockConv_Status_DataEncryptionFailed 191 */ 192FwdLockConv_Status_t FwdLockConv_ConvertData(int sessionId, 193 const void *pBuffer, 194 size_t numBytes, 195 FwdLockConv_Output_t *pOutput); 196 197/** 198 * Closes a session for converting an OMA DRM v1 Forward Lock file to the internal Forward Lock 199 * file format. The caller must update the produced output file at the indicated file offset with 200 * the final set of signatures. 201 * 202 * @param[in] sessionId The session ID. 203 * @param[in,out] pOutput The output from the conversion process (deallocated and overwritten). 204 * 205 * @return A status code. 206 * @retval FwdLockConv_Status_OK 207 * @retval FwdLockConv_Status_InvalidArgument 208 * @retval FwdLockConv_Status_OutOfMemory 209 * @retval FwdLockConv_Status_IntegrityProtectionFailed 210 */ 211FwdLockConv_Status_t FwdLockConv_CloseSession(int sessionId, FwdLockConv_Output_t *pOutput); 212 213/** 214 * Converts an open OMA DRM v1 Forward Lock file to the internal Forward Lock file format in pull 215 * mode. 216 * 217 * @param[in] inputFileDesc The file descriptor of the open input file. 218 * @param[in] fpReadFunc A reference to a read function that can operate on the open input file. 219 * @param[in] outputFileDesc The file descriptor of the open output file. 220 * @param[in] fpWriteFunc A reference to a write function that can operate on the open output file. 221 * @param[in] fpLSeekFunc A reference to an lseek function that can operate on the open output file. 222 * @param[out] pErrorPos 223 * The file position where the error occurred, in the case of a syntax error. May be NULL. 224 * 225 * @return A status code. 226 * @retval FwdLockConv_Status_OK 227 * @retval FwdLockConv_Status_InvalidArgument 228 * @retval FwdLockConv_Status_OutOfMemory 229 * @retval FwdLockConv_Status_FileReadError 230 * @retval FwdLockConv_Status_FileWriteError 231 * @retval FwdLockConv_Status_FileSeekError 232 * @retval FwdLockConv_Status_SyntaxError 233 * @retval FwdLockConv_Status_UnsupportedFileFormat 234 * @retval FwdLockConv_Status_UnsupportedContentTransferEncoding 235 * @retval FwdLockConv_Status_RandomNumberGenerationFailed 236 * @retval FwdLockConv_Status_KeyEncryptionFailed 237 * @retval FwdLockConv_Status_DataEncryptionFailed 238 * @retval FwdLockConv_Status_IntegrityProtectionFailed 239 * @retval FwdLockConv_Status_TooManySessions 240 */ 241FwdLockConv_Status_t FwdLockConv_ConvertOpenFile(int inputFileDesc, 242 FwdLockConv_ReadFunc_t *fpReadFunc, 243 int outputFileDesc, 244 FwdLockConv_WriteFunc_t *fpWriteFunc, 245 FwdLockConv_LSeekFunc_t *fpLSeekFunc, 246 off64_t *pErrorPos); 247 248/** 249 * Converts an OMA DRM v1 Forward Lock file to the internal Forward Lock file format in pull mode. 250 * 251 * @param[in] pInputFilename A reference to the input filename. 252 * @param[in] pOutputFilename A reference to the output filename. 253 * @param[out] pErrorPos 254 * The file position where the error occurred, in the case of a syntax error. May be NULL. 255 * 256 * @return A status code. 257 * @retval FwdLockConv_Status_OK 258 * @retval FwdLockConv_Status_InvalidArgument 259 * @retval FwdLockConv_Status_OutOfMemory 260 * @retval FwdLockConv_Status_FileNotFound 261 * @retval FwdLockConv_Status_FileCreationFailed 262 * @retval FwdLockConv_Status_FileReadError 263 * @retval FwdLockConv_Status_FileWriteError 264 * @retval FwdLockConv_Status_FileSeekError 265 * @retval FwdLockConv_Status_SyntaxError 266 * @retval FwdLockConv_Status_UnsupportedFileFormat 267 * @retval FwdLockConv_Status_UnsupportedContentTransferEncoding 268 * @retval FwdLockConv_Status_RandomNumberGenerationFailed 269 * @retval FwdLockConv_Status_KeyEncryptionFailed 270 * @retval FwdLockConv_Status_DataEncryptionFailed 271 * @retval FwdLockConv_Status_IntegrityProtectionFailed 272 * @retval FwdLockConv_Status_TooManySessions 273 */ 274FwdLockConv_Status_t FwdLockConv_ConvertFile(const char *pInputFilename, 275 const char *pOutputFilename, 276 off64_t *pErrorPos); 277 278#ifdef __cplusplus 279} 280#endif 281 282#endif // __FWDLOCKCONV_H__ 283