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.
136 lines
2.4 KiB
136 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 ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*****************************************************************************/
|