You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
2.4 KiB
135 lines
2.4 KiB
/*****************************************************************************/ |
|
// 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 (); |
|
|
|
} |
|
|
|
} |
|
|
|
/*****************************************************************************/
|
|
|