Mercurial > hg > orthanc
view OrthancFramework/Resources/Patches/dcmtk-3.7.0.patch @ 6552:0c97c019b493 default tip
updated dicom conformance statement for dcmtk 3.7.0
| author | Sebastien Jodogne <s.jodogne@gmail.com> |
|---|---|
| date | Fri, 19 Dec 2025 18:08:18 +0100 |
| parents | cca87835da95 |
| children |
line wrap: on
line source
diff -urEb dcmtk-3.7.0.orig/CMake/GenerateDCMTKConfigure.cmake dcmtk-3.7.0/CMake/GenerateDCMTKConfigure.cmake --- dcmtk-3.7.0.orig/CMake/GenerateDCMTKConfigure.cmake 2025-12-19 14:29:01.247154576 +0100 +++ dcmtk-3.7.0/CMake/GenerateDCMTKConfigure.cmake 2025-12-19 14:29:46.562859573 +0100 @@ -227,9 +227,12 @@ # Check the sizes of various types include(CheckTypeSize) +if (NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + # This doesn't work for wasm, Orthanc defines the macros manually CHECK_TYPE_SIZE("int" SIZEOF_INT) CHECK_TYPE_SIZE("long" SIZEOF_LONG) CHECK_TYPE_SIZE("void*" SIZEOF_VOID_P) +endif() # Check for include files, libraries, and functions include("${DCMTK_CMAKE_INCLUDE}CMake/dcmtkTryCompile.cmake") diff -urEb dcmtk-3.7.0.orig/dcmdata/include/dcmtk/dcmdata/dcdict.h dcmtk-3.7.0/dcmdata/include/dcmtk/dcmdata/dcdict.h --- dcmtk-3.7.0.orig/dcmdata/include/dcmtk/dcmdata/dcdict.h 2025-12-19 14:29:01.223154732 +0100 +++ dcmtk-3.7.0/dcmdata/include/dcmtk/dcmdata/dcdict.h 2025-12-19 14:30:11.875694664 +0100 @@ -163,6 +163,12 @@ /// returns an iterator to the end of the repeating groups data dictionary DcmDictEntryListIterator repeatingEnd() { return repDict.end(); } + // Function by the Orthanc project to load a dictionary from a + // memory buffer, which is necessary in sandboxed + // environments. This is an adapted version of + // DcmDataDictionary::loadDictionary(). + OFBool loadFromMemory(const std::string& content, OFBool errorIfAbsent = OFTrue); + private: /** private undefined assignment operator diff -urEb dcmtk-3.7.0.orig/dcmdata/libsrc/dcdict.cc dcmtk-3.7.0/dcmdata/libsrc/dcdict.cc --- dcmtk-3.7.0.orig/dcmdata/libsrc/dcdict.cc 2025-12-19 14:29:01.230154687 +0100 +++ dcmtk-3.7.0/dcmdata/libsrc/dcdict.cc 2025-12-19 14:32:07.304941668 +0100 @@ -904,3 +904,5 @@ wrlock().clear(); wrunlock(); } + +#include "dcdict_orthanc.cc" diff -urEb dcmtk-3.7.0.orig/dcmdata/libsrc/dclist.cc dcmtk-3.7.0/dcmdata/libsrc/dclist.cc --- dcmtk-3.7.0.orig/dcmdata/libsrc/dclist.cc 2025-12-19 14:29:01.226154713 +0100 +++ dcmtk-3.7.0/dcmdata/libsrc/dclist.cc 2025-12-19 16:32:05.503265348 +0100 @@ -19,6 +19,11 @@ * */ + +#ifdef _WIN32 +#define NOMINMAX +#endif + #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */ #include "dcmtk/ofstd/ofstream.h" diff -urEb dcmtk-3.7.0.orig/dcmdata/libsrc/dcpxitem.cc dcmtk-3.7.0/dcmdata/libsrc/dcpxitem.cc --- dcmtk-3.7.0.orig/dcmdata/libsrc/dcpxitem.cc 2025-12-19 14:29:01.226154713 +0100 +++ dcmtk-3.7.0/dcmdata/libsrc/dcpxitem.cc 2025-12-19 14:32:22.058845317 +0100 @@ -31,6 +31,8 @@ #include "dcmtk/dcmdata/dcostrma.h" /* for class DcmOutputStream */ #include "dcmtk/dcmdata/dcwcache.h" /* for class DcmWriteCache */ +#undef max +#include "dcmtk/ofstd/oflimits.h" // ******************************** diff -urEb dcmtk-3.7.0.orig/dcmimgle/libsrc/dimoimg.cc dcmtk-3.7.0/dcmimgle/libsrc/dimoimg.cc --- dcmtk-3.7.0.orig/dcmimgle/libsrc/dimoimg.cc 2025-12-19 14:29:01.240154622 +0100 +++ dcmtk-3.7.0/dcmimgle/libsrc/dimoimg.cc 2025-12-19 16:37:36.341891012 +0100 @@ -20,6 +20,10 @@ */ +#ifdef _WIN32 +#define NOMINMAX +#endif + #include "dcmtk/config/osconfig.h" #include "dcmtk/dcmimgle/dimoimg.h" diff -urEb dcmtk-3.7.0.orig/dcmnet/libsrc/scu.cc dcmtk-3.7.0/dcmnet/libsrc/scu.cc --- dcmtk-3.7.0.orig/dcmnet/libsrc/scu.cc 2025-12-19 14:29:01.298154244 +0100 +++ dcmtk-3.7.0/dcmnet/libsrc/scu.cc 2025-12-19 14:32:55.028558816 +0100 @@ -19,6 +19,11 @@ * */ +#if defined(_WIN32) +# define __STDC_LIMIT_MACROS // Get access to UINT16_MAX +# include <stdint.h> +#endif + #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */ #include "dcmtk/dcmdata/dcostrmf.h" /* for class DcmOutputFileStream */ diff -urEb dcmtk-3.7.0.orig/oficonv/include/dcmtk/oficonv/iconv.h dcmtk-3.7.0/oficonv/include/dcmtk/oficonv/iconv.h --- dcmtk-3.7.0.orig/oficonv/include/dcmtk/oficonv/iconv.h 2025-12-19 14:29:01.259154498 +0100 +++ dcmtk-3.7.0/oficonv/include/dcmtk/oficonv/iconv.h 2025-12-19 14:33:18.961339935 +0100 @@ -53,7 +53,12 @@ #endif struct __tag_iconv_t; + +#if defined(__LSB_VERSION__) +typedef void *iconv_t; +#else typedef struct __tag_iconv_t *iconv_t; +#endif #ifndef OFICONV_CITRUS_WC_T_DEFINED #define OFICONV_CITRUS_WC_T_DEFINED diff -urEb dcmtk-3.7.0.orig/oficonv/libsrc/citrus_csmapper.c dcmtk-3.7.0/oficonv/libsrc/citrus_csmapper.c --- dcmtk-3.7.0.orig/oficonv/libsrc/citrus_csmapper.c 2025-12-19 14:29:01.260154492 +0100 +++ dcmtk-3.7.0/oficonv/libsrc/citrus_csmapper.c 2025-12-19 14:34:19.900793503 +0100 @@ -61,7 +61,8 @@ #ifdef WITH_THREADS #ifdef HAVE_WINDOWS_H -static SRWLOCK ma_lock = SRWLOCK_INIT; +static int ma_lock_initialized = 0; +static CRITICAL_SECTION ma_lock; #elif defined(HAVE_PTHREAD_H) static pthread_rwlock_t ma_lock = PTHREAD_RWLOCK_INITIALIZER; #endif @@ -380,6 +381,14 @@ char mapper_path[OFICONV_PATH_MAX]; unsigned long norm; int ret; + +#if defined(WITH_THREADS) && defined(HAVE_WINDOWS_H) + if (ma_lock_initialized == 0) { /* Very minor risk of race condition here */ + InitializeCriticalSection(&ma_lock); + ma_lock_initialized = 1; + } +#endif + norm = 0; getCSMapperPath(mapper_path, sizeof(mapper_path), NULL); diff -urEb dcmtk-3.7.0.orig/oficonv/libsrc/citrus_iconv.c dcmtk-3.7.0/oficonv/libsrc/citrus_iconv.c --- dcmtk-3.7.0.orig/oficonv/libsrc/citrus_iconv.c 2025-12-19 14:29:01.284154336 +0100 +++ dcmtk-3.7.0/oficonv/libsrc/citrus_iconv.c 2025-12-19 14:43:41.671257024 +0100 @@ -47,7 +47,15 @@ #endif #include <limits.h> + +#if (_MSC_VER >= 1900) #include <stdbool.h> +#else +#define bool int +#define false 0 +#define true 1 +#endif + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -78,7 +86,8 @@ #ifdef WITH_THREADS #ifdef HAVE_WINDOWS_H -static SRWLOCK ci_lock = SRWLOCK_INIT; +static int ci_lock_initialized = 0; +static CRITICAL_SECTION ci_lock; #elif defined(HAVE_PTHREAD_H) static pthread_rwlock_t ci_lock = PTHREAD_RWLOCK_INITIALIZER; #endif @@ -297,14 +306,24 @@ _citrus_iconv_open(struct _citrus_iconv * * rcv, const char * src, const char * dst) { -struct _citrus_iconv *cv = NULL; +#ifdef HAVE_WINDOWS_H + char current_codepage[20]; +#endif + + struct _citrus_iconv *cv = NULL; struct _citrus_iconv_shared *ci = NULL; char realdst[OFICONV_PATH_MAX], realsrc[OFICONV_PATH_MAX]; int ret; +#if defined(WITH_THREADS) && defined(HAVE_WINDOWS_H) + if (ci_lock_initialized == 0) { /* Very minor risk of race condition here */ + InitializeCriticalSection(&ci_lock); + ci_lock_initialized = 1; + } +#endif + init_cache(); #ifdef HAVE_WINDOWS_H - char current_codepage[20]; snprintf(current_codepage, sizeof(current_codepage), "%lu", (unsigned long) GetConsoleOutputCP()); #endif diff -urEb dcmtk-3.7.0.orig/oficonv/libsrc/citrus_lock.h dcmtk-3.7.0/oficonv/libsrc/citrus_lock.h --- dcmtk-3.7.0.orig/oficonv/libsrc/citrus_lock.h 2025-12-19 14:29:01.279154368 +0100 +++ dcmtk-3.7.0/oficonv/libsrc/citrus_lock.h 2025-12-19 16:48:26.750185959 +0100 @@ -31,7 +31,7 @@ #ifdef WITH_THREADS -#ifdef HAVE_WINDOWS_H +#if defined(HAVE_WINDOWS_H) #include <windows.h> #define WLOCK(lock) AcquireSRWLockExclusive(lock); diff -urEb dcmtk-3.7.0.orig/oficonv/libsrc/citrus_mapper.c dcmtk-3.7.0/oficonv/libsrc/citrus_mapper.c --- dcmtk-3.7.0.orig/oficonv/libsrc/citrus_mapper.c 2025-12-19 14:29:01.274154401 +0100 +++ dcmtk-3.7.0/oficonv/libsrc/citrus_mapper.c 2025-12-19 14:45:32.613427883 +0100 @@ -60,7 +60,8 @@ #ifdef WITH_THREADS #ifdef HAVE_WINDOWS_H -static SRWLOCK cm_lock = SRWLOCK_INIT; +static int cm_lock_initialized = 0; +static CRITICAL_SECTION cm_lock; #elif defined(HAVE_PTHREAD_H) static pthread_rwlock_t cm_lock = PTHREAD_RWLOCK_INITIALIZER; #endif @@ -354,6 +355,13 @@ const char *module, *variable; int hashval, ret; +#if defined(WITH_THREADS) && defined(HAVE_WINDOWS_H) + if (cm_lock_initialized == 0) { /* Very minor risk of race condition here */ + InitializeCriticalSection(&cm_lock); + cm_lock_initialized = 1; + } +#endif + variable = NULL; WLOCK(&cm_lock); diff -urEb dcmtk-3.7.0.orig/oflog/include/dcmtk/oflog/thread/syncpub.h dcmtk-3.7.0/oflog/include/dcmtk/oflog/thread/syncpub.h --- dcmtk-3.7.0.orig/oflog/include/dcmtk/oflog/thread/syncpub.h 2025-12-19 14:29:01.190154947 +0100 +++ dcmtk-3.7.0/oflog/include/dcmtk/oflog/thread/syncpub.h 2025-12-19 14:45:55.441258943 +0100 @@ -63,7 +63,7 @@ DCMTK_LOG4CPLUS_INLINE_EXPORT Mutex::Mutex (Mutex::Type t) - : mtx (DCMTK_LOG4CPLUS_THREADED (new impl::Mutex (t) + 0)) + : mtx (DCMTK_LOG4CPLUS_THREADED (new impl::Mutex (t))) { } @@ -106,7 +106,7 @@ DCMTK_LOG4CPLUS_INLINE_EXPORT Semaphore::Semaphore (unsigned DCMTK_LOG4CPLUS_THREADED (max), unsigned DCMTK_LOG4CPLUS_THREADED (initial)) - : sem (DCMTK_LOG4CPLUS_THREADED (new impl::Semaphore (max, initial) + 0)) + : sem (DCMTK_LOG4CPLUS_THREADED (new impl::Semaphore (max, initial))) { } @@ -190,7 +190,7 @@ DCMTK_LOG4CPLUS_INLINE_EXPORT ManualResetEvent::ManualResetEvent (bool DCMTK_LOG4CPLUS_THREADED (sig)) - : ev (DCMTK_LOG4CPLUS_THREADED (new impl::ManualResetEvent (sig) + 0)) + : ev (DCMTK_LOG4CPLUS_THREADED (new impl::ManualResetEvent (sig))) { } @@ -252,7 +252,7 @@ DCMTK_LOG4CPLUS_INLINE_EXPORT SharedMutex::SharedMutex () - : sm (DCMTK_LOG4CPLUS_THREADED (new impl::SharedMutex + 0)) + : sm (DCMTK_LOG4CPLUS_THREADED (new impl::SharedMutex)) { } diff -urEb dcmtk-3.7.0.orig/oflog/libsrc/oflog.cc dcmtk-3.7.0/oflog/libsrc/oflog.cc --- dcmtk-3.7.0.orig/oflog/libsrc/oflog.cc 2025-12-19 14:29:01.191154941 +0100 +++ dcmtk-3.7.0/oflog/libsrc/oflog.cc 2025-12-19 14:46:16.546103212 +0100 @@ -19,6 +19,11 @@ * */ + +#if defined(_WIN32) +# include <winsock2.h> +#endif + #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */ #include "dcmtk/oflog/oflog.h" diff -urEb dcmtk-3.7.0.orig/ofstd/include/dcmtk/ofstd/offile.h dcmtk-3.7.0/ofstd/include/dcmtk/ofstd/offile.h --- dcmtk-3.7.0.orig/ofstd/include/dcmtk/ofstd/offile.h 2025-12-19 14:29:01.292154283 +0100 +++ dcmtk-3.7.0/ofstd/include/dcmtk/ofstd/offile.h 2025-12-19 14:46:45.533889981 +0100 @@ -560,7 +560,7 @@ */ void setlinebuf() { -#if defined(_WIN32) || defined(__hpux) +#if defined(_WIN32) || defined(__hpux) || defined(__LSB_VERSION__) this->setvbuf(NULL, _IOLBF, 0); #else :: setlinebuf(file_); diff -urEb dcmtk-3.7.0.orig/ofstd/libsrc/ofstub.cc dcmtk-3.7.0/ofstd/libsrc/ofstub.cc --- dcmtk-3.7.0.orig/ofstd/libsrc/ofstub.cc 2025-12-19 14:29:01.294154271 +0100 +++ dcmtk-3.7.0/ofstd/libsrc/ofstub.cc 2025-12-19 14:47:06.737734493 +0100 @@ -35,6 +35,10 @@ #include <windows.h> #endif /* HAVE_WINDOWS_H */ +#if defined(__LSB_VERSION__) +#include <errno.h> +#endif + #define EXITCODE_CANNOT_DETERMINE_DIR 90 #define EXITCODE_EXEC_FAILED 91 #define EXITCODE_ILLEGAL_PARAMS 92
