# HG changeset patch # User Sebastien Jodogne # Date 1479897902 -3600 # Node ID baf8dd89b4e0f85eb8b917010802afd04348b67d # Parent d15de5685ad876f9a2a35b8fd6c06463b54990a3 improved support for sandboxed environments diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/IImageWriter.cpp --- a/Core/Images/IImageWriter.cpp Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/IImageWriter.cpp Wed Nov 23 11:45:02 2016 +0100 @@ -32,18 +32,13 @@ #include "IImageWriter.h" -#include "../OrthancException.h" - -#if !defined(ORTHANC_SANDBOXED) -# error The macro ORTHANC_SANDBOXED must be defined -#endif - #if ORTHANC_SANDBOXED == 0 # include "../SystemToolbox.h" #endif namespace Orthanc { +#if ORTHANC_SANDBOXED == 0 void IImageWriter::WriteToFileInternal(const std::string& path, unsigned int width, unsigned int height, @@ -51,12 +46,9 @@ PixelFormat format, const void* buffer) { -#if ORTHANC_SANDBOXED == 0 std::string compressed; WriteToMemoryInternal(compressed, width, height, pitch, format, buffer); SystemToolbox::WriteFile(compressed, path); -#else - throw OrthancException(ErrorCode_CannotWriteFile); // Unavailable in sandboxed environments + } #endif - } } diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/IImageWriter.h --- a/Core/Images/IImageWriter.h Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/IImageWriter.h Wed Nov 23 11:45:02 2016 +0100 @@ -36,6 +36,10 @@ #include +#if !defined(ORTHANC_SANDBOXED) +# error The macro ORTHANC_SANDBOXED must be defined +#endif + namespace Orthanc { class IImageWriter : public boost::noncopyable @@ -48,12 +52,14 @@ PixelFormat format, const void* buffer) = 0; +#if ORTHANC_SANDBOXED == 0 virtual void WriteToFileInternal(const std::string& path, unsigned int width, unsigned int height, unsigned int pitch, PixelFormat format, const void* buffer); +#endif public: virtual ~IImageWriter() @@ -67,11 +73,13 @@ accessor.GetPitch(), accessor.GetFormat(), accessor.GetConstBuffer()); } +#if ORTHANC_SANDBOXED == 0 virtual void WriteToFile(const std::string& path, const ImageAccessor& accessor) { WriteToFileInternal(path, accessor.GetWidth(), accessor.GetHeight(), accessor.GetPitch(), accessor.GetFormat(), accessor.GetConstBuffer()); } +#endif }; } diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/JpegReader.cpp --- a/Core/Images/JpegReader.cpp Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/JpegReader.cpp Wed Nov 23 11:45:02 2016 +0100 @@ -94,6 +94,7 @@ } +#if ORTHANC_SANDBOXED == 0 void JpegReader::ReadFromFile(const std::string& filename) { FILE* fp = SystemToolbox::OpenFile(filename, FileMode_ReadBinary); @@ -135,6 +136,7 @@ jpeg_destroy_decompress(&cinfo); fclose(fp); } +#endif void JpegReader::ReadFromMemory(const void* buffer, diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/JpegReader.h --- a/Core/Images/JpegReader.h Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/JpegReader.h Wed Nov 23 11:45:02 2016 +0100 @@ -37,6 +37,10 @@ #include #include +#if !defined(ORTHANC_SANDBOXED) +# error The macro ORTHANC_SANDBOXED must be defined +#endif + namespace Orthanc { class JpegReader : @@ -47,7 +51,9 @@ std::string content_; public: +#if ORTHANC_SANDBOXED == 0 void ReadFromFile(const std::string& filename); +#endif void ReadFromMemory(const void* buffer, size_t size); diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/JpegWriter.cpp --- a/Core/Images/JpegWriter.cpp Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/JpegWriter.cpp Wed Nov 23 11:45:02 2016 +0100 @@ -112,6 +112,7 @@ } +#if ORTHANC_SANDBOXED == 0 void JpegWriter::WriteToFileInternal(const std::string& filename, unsigned int width, unsigned int height, @@ -155,6 +156,7 @@ fclose(fp); } +#endif void JpegWriter::WriteToMemoryInternal(std::string& jpeg, diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/JpegWriter.h --- a/Core/Images/JpegWriter.h Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/JpegWriter.h Wed Nov 23 11:45:02 2016 +0100 @@ -46,12 +46,14 @@ PixelFormat format, const void* buffer); +#if ORTHANC_SANDBOXED == 0 virtual void WriteToMemoryInternal(std::string& jpeg, unsigned int width, unsigned int height, unsigned int pitch, PixelFormat format, const void* buffer); +#endif private: uint8_t quality_; diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/PngReader.cpp --- a/Core/Images/PngReader.cpp Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/PngReader.cpp Wed Nov 23 11:45:02 2016 +0100 @@ -42,6 +42,7 @@ namespace Orthanc { +#if ORTHANC_SANDBOXED == 0 namespace { struct FileRabi @@ -66,6 +67,7 @@ } }; } +#endif struct PngReader::PngRabi @@ -207,6 +209,8 @@ AssignWritable(format, width, height, pitch, &data_[0]); } + +#if ORTHANC_SANDBOXED == 0 void PngReader::ReadFromFile(const std::string& filename) { FileRabi f(filename.c_str()); @@ -231,6 +235,7 @@ Read(rabi); } +#endif namespace diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/PngReader.h --- a/Core/Images/PngReader.h Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/PngReader.h Wed Nov 23 11:45:02 2016 +0100 @@ -41,6 +41,10 @@ #include #include +#if !defined(ORTHANC_SANDBOXED) +# error The macro ORTHANC_SANDBOXED must be defined +#endif + namespace Orthanc { class PngReader : @@ -59,7 +63,9 @@ public: PngReader(); +#if ORTHANC_SANDBOXED == 0 void ReadFromFile(const std::string& filename); +#endif void ReadFromMemory(const void* buffer, size_t size); diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/PngWriter.cpp --- a/Core/Images/PngWriter.cpp Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/PngWriter.cpp Wed Nov 23 11:45:02 2016 +0100 @@ -203,6 +203,7 @@ } +#if ORTHANC_SANDBOXED == 0 void PngWriter::WriteToFileInternal(const std::string& filename, unsigned int width, unsigned int height, @@ -230,7 +231,7 @@ fclose(fp); } - +#endif static void MemoryCallback(png_structp png_ptr, diff -r d15de5685ad8 -r baf8dd89b4e0 Core/Images/PngWriter.h --- a/Core/Images/PngWriter.h Tue Nov 22 15:03:14 2016 +0100 +++ b/Core/Images/PngWriter.h Wed Nov 23 11:45:02 2016 +0100 @@ -48,12 +48,14 @@ PixelFormat format, const void* buffer); +#if ORTHANC_SANDBOXED == 0 virtual void WriteToMemoryInternal(std::string& png, unsigned int width, unsigned int height, unsigned int pitch, PixelFormat format, const void* buffer); +#endif private: struct PImpl;