summaryrefslogtreecommitdiff
path: root/gpr/source/lib/dng_sdk/dng_file_stream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gpr/source/lib/dng_sdk/dng_file_stream.cpp')
-rw-r--r--gpr/source/lib/dng_sdk/dng_file_stream.cpp135
1 files changed, 135 insertions, 0 deletions
diff --git a/gpr/source/lib/dng_sdk/dng_file_stream.cpp b/gpr/source/lib/dng_sdk/dng_file_stream.cpp
new file mode 100644
index 0000000..4a8a79f
--- /dev/null
+++ b/gpr/source/lib/dng_sdk/dng_file_stream.cpp
@@ -0,0 +1,135 @@
+/*****************************************************************************/
+// 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 ();
+
+ }
+
+ }
+
+/*****************************************************************************/