blob: 7488d4335be76bddc394e6f54e104f791432f8be [file] [log] [blame]
/* $Id$
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version
* 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifdef FILE_INC_HEADER
#endif
#ifdef FILE_INC_MEMBER
private:
FILE* mHandle;
bool_t mIsOpen;
#endif
#ifdef FILE_INC_IMPL
inline File::File(const char* name, const char* flags) :
mHandle(NULL) ,
mIsOpen(false) {
errno_t error;
// try to open file
error = fopen_s(&mHandle, name, flags);
if(error == 0) {
mIsOpen = true;
}
}
inline bool_t File::isOpen() {
return mIsOpen;
}
inline bool_t File::isEof() {
if(mHandle == NULL) {
return false;
}
return (feof(mHandle) != 0);
}
inline status_t File::read(char * buffer, uint32_t length, int32_t* numBytes) {
if(buffer == NULL) {
return CAPU_EINVAL;
}
if(mHandle == NULL) {
return CAPU_ERROR;
}
size_t result = fread(buffer, 1, length, mHandle);
if(result == length) {
if(numBytes != NULL) {
*numBytes = result;
}
return CAPU_OK;
}
if(feof(mHandle)) {
if(numBytes != NULL) {
*numBytes = result;
}
return CAPU_EOF;
}
return CAPU_ERROR;
}
inline status_t File::write(char * buffer, uint32_t length) {
if(buffer == NULL) {
return CAPU_EINVAL;
}
if(mHandle == NULL) {
return CAPU_ERROR;
}
size_t result = fwrite(buffer, 1, length, mHandle);
if(result != length) {
return CAPU_ERROR;
}
return CAPU_OK;
}
inline status_t File::flush() {
if(mHandle != NULL) {
int error = fflush(mHandle);
if(error == 0) {
return CAPU_OK;
}
}
return CAPU_ERROR;
}
inline status_t File::close() {
if(mHandle != NULL) {
fclose(mHandle);
mHandle = NULL;
mIsOpen = false;
return CAPU_OK;
}
return CAPU_ERROR;
}
inline File::~File() {
if(mHandle != NULL) {
fclose(mHandle);
}
}
#endif