| /*****************************************************************************/ |
| // 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 (); |
| |
| } |
| |
| } |
| |
| /*****************************************************************************/ |