/*****************************************************************************/ // Copyright 2006-2007 Adobe Systems Incorporated // All Rights Reserved. // // NOTICE: Adobe permits you to use, modify, and distribute this file in // accordance with the terms of the Adobe license agreement accompanying it. /*****************************************************************************/ /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_file_stream.cpp#2 $ */ /* $DateTime: 2012/06/01 07:28:57 $ */ /* $Change: 832715 $ */ /* $Author: tknoll $ */ /*****************************************************************************/ #include "dng_file_stream.h" #include "dng_exceptions.h" /*****************************************************************************/ dng_file_stream::dng_file_stream (const char *filename, bool output, uint32 bufferSize) : dng_stream ((dng_abort_sniffer *) NULL, bufferSize, 0) , fFile (NULL) { fFile = fopen (filename, output ? "wb" : "rb"); if (!fFile) { #if qDNGValidate ReportError ("Unable to open file", filename); ThrowSilentError (); #else ThrowOpenFile (); #endif } } /*****************************************************************************/ dng_file_stream::~dng_file_stream () { if (fFile) { fclose (fFile); fFile = NULL; } } /*****************************************************************************/ uint64 dng_file_stream::DoGetLength () { if (fseek (fFile, 0, SEEK_END) != 0) { ThrowReadFile (); } return (uint64) ftell (fFile); } /*****************************************************************************/ void dng_file_stream::DoRead (void *data, uint32 count, uint64 offset) { if (fseek (fFile, (long) offset, SEEK_SET) != 0) { ThrowReadFile (); } uint32 bytesRead = (uint32) fread (data, 1, count, fFile); if (bytesRead != count) { ThrowReadFile (); } } /*****************************************************************************/ void dng_file_stream::DoWrite (const void *data, uint32 count, uint64 offset) { if (fseek (fFile, (uint32) offset, SEEK_SET) != 0) { ThrowWriteFile (); } uint32 bytesWritten = (uint32) fwrite (data, 1, count, fFile); if (bytesWritten != count) { ThrowWriteFile (); } } /*****************************************************************************/