changeset 6007:5d6ad702fa67

recovered compatibility with Windows XP
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 18 Feb 2025 17:42:00 +0100
parents 318f3234e9ed
children 5547f4c01253
files NEWS OrthancFramework/Resources/Patches/dcmtk-3.6.9.patch
diffstat 2 files changed, 117 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/NEWS	Tue Feb 18 17:35:27 2025 +0100
+++ b/NEWS	Tue Feb 18 17:42:00 2025 +0100
@@ -13,10 +13,11 @@
 Maintenance
 -----------
 
-* In the "ExtendedFind" mode, optimized "tools/find" when "StorageAccessMode" is 
-  set to "Never".
+* In the "ExtendedFind" mode, optimized "tools/find" when "StorageAccessMode" is set to "Never".
 * Fixed interpretation of returnUnsupportedImage in /preview route. 
-* GET /series/../study now also contain LastUpdate field (https://discourse.orthanc-server.org/t/lastupdate-coherency/5524)
+* GET /series/../study now also contain LastUpdate field:
+  https://discourse.orthanc-server.org/t/lastupdate-coherency/5524
+* Recovered compatibility with Windows XP that was broken because of DCMTK 3.6.9
 
 
 Version 1.12.6 (2025-01-22)
--- a/OrthancFramework/Resources/Patches/dcmtk-3.6.9.patch	Tue Feb 18 17:35:27 2025 +0100
+++ b/OrthancFramework/Resources/Patches/dcmtk-3.6.9.patch	Tue Feb 18 17:42:00 2025 +0100
@@ -1,6 +1,6 @@
 diff -urEb dcmtk-3.6.9.orig/CMake/GenerateDCMTKConfigure.cmake dcmtk-3.6.9/CMake/GenerateDCMTKConfigure.cmake
---- dcmtk-3.6.9.orig/CMake/GenerateDCMTKConfigure.cmake	2025-01-21 15:53:12.632715225 +0100
-+++ dcmtk-3.6.9/CMake/GenerateDCMTKConfigure.cmake	2025-01-21 15:53:27.614627545 +0100
+--- dcmtk-3.6.9.orig/CMake/GenerateDCMTKConfigure.cmake	2025-02-18 17:20:55.792247658 +0100
++++ dcmtk-3.6.9/CMake/GenerateDCMTKConfigure.cmake	2025-02-18 17:36:55.955317099 +0100
 @@ -227,12 +227,15 @@
  
  # Check the sizes of various types
@@ -18,8 +18,8 @@
  # Check for include files, libraries, and functions
  include("${DCMTK_CMAKE_INCLUDE}CMake/dcmtkTryCompile.cmake")
 diff -urEb dcmtk-3.6.9.orig/dcmdata/include/dcmtk/dcmdata/dcdict.h dcmtk-3.6.9/dcmdata/include/dcmtk/dcmdata/dcdict.h
---- dcmtk-3.6.9.orig/dcmdata/include/dcmtk/dcmdata/dcdict.h	2025-01-21 15:53:12.622715283 +0100
-+++ dcmtk-3.6.9/dcmdata/include/dcmtk/dcmdata/dcdict.h	2025-01-21 15:53:27.614627545 +0100
+--- dcmtk-3.6.9.orig/dcmdata/include/dcmtk/dcmdata/dcdict.h	2025-02-18 17:20:55.783247713 +0100
++++ dcmtk-3.6.9/dcmdata/include/dcmtk/dcmdata/dcdict.h	2025-02-18 17:36:55.955317099 +0100
 @@ -163,6 +163,12 @@
      /// returns an iterator to the end of the repeating groups data dictionary
      DcmDictEntryListIterator repeatingEnd() { return repDict.end(); }
@@ -34,8 +34,8 @@
  
      /** private undefined assignment operator
 diff -urEb dcmtk-3.6.9.orig/dcmdata/libsrc/dcdict.cc dcmtk-3.6.9/dcmdata/libsrc/dcdict.cc
---- dcmtk-3.6.9.orig/dcmdata/libsrc/dcdict.cc	2025-01-21 15:53:12.625715265 +0100
-+++ dcmtk-3.6.9/dcmdata/libsrc/dcdict.cc	2025-01-21 15:53:27.615627539 +0100
+--- dcmtk-3.6.9.orig/dcmdata/libsrc/dcdict.cc	2025-02-18 17:20:55.785247700 +0100
++++ dcmtk-3.6.9/dcmdata/libsrc/dcdict.cc	2025-02-18 17:36:55.956317093 +0100
 @@ -904,3 +904,5 @@
    wrlock().clear();
    wrunlock();
@@ -43,8 +43,8 @@
 +
 +#include "dcdict_orthanc.cc"
 diff -urEb dcmtk-3.6.9.orig/dcmdata/libsrc/dcpxitem.cc dcmtk-3.6.9/dcmdata/libsrc/dcpxitem.cc
---- dcmtk-3.6.9.orig/dcmdata/libsrc/dcpxitem.cc	2025-01-21 15:53:12.623715277 +0100
-+++ dcmtk-3.6.9/dcmdata/libsrc/dcpxitem.cc	2025-01-21 15:53:27.615627539 +0100
+--- dcmtk-3.6.9.orig/dcmdata/libsrc/dcpxitem.cc	2025-02-18 17:20:55.784247707 +0100
++++ dcmtk-3.6.9/dcmdata/libsrc/dcpxitem.cc	2025-02-18 17:36:55.956317093 +0100
 @@ -31,6 +31,8 @@
  #include "dcmtk/dcmdata/dcostrma.h"    /* for class DcmOutputStream */
  #include "dcmtk/dcmdata/dcwcache.h"    /* for class DcmWriteCache */
@@ -55,8 +55,8 @@
  // ********************************
  
 diff -urEb dcmtk-3.6.9.orig/dcmnet/libsrc/scu.cc dcmtk-3.6.9/dcmnet/libsrc/scu.cc
---- dcmtk-3.6.9.orig/dcmnet/libsrc/scu.cc	2025-01-21 15:53:12.655715091 +0100
-+++ dcmtk-3.6.9/dcmnet/libsrc/scu.cc	2025-01-21 15:53:27.616627533 +0100
+--- dcmtk-3.6.9.orig/dcmnet/libsrc/scu.cc	2025-02-18 17:20:55.811247541 +0100
++++ dcmtk-3.6.9/dcmnet/libsrc/scu.cc	2025-02-18 17:36:55.957317086 +0100
 @@ -19,6 +19,11 @@
   *
   */
@@ -70,8 +70,8 @@
  
  #include "dcmtk/dcmdata/dcostrmf.h" /* for class DcmOutputFileStream */
 diff -urEb dcmtk-3.6.9.orig/oficonv/include/dcmtk/oficonv/iconv.h dcmtk-3.6.9/oficonv/include/dcmtk/oficonv/iconv.h
---- dcmtk-3.6.9.orig/oficonv/include/dcmtk/oficonv/iconv.h	2025-01-21 15:53:12.637715196 +0100
-+++ dcmtk-3.6.9/oficonv/include/dcmtk/oficonv/iconv.h	2025-01-21 15:53:27.617627527 +0100
+--- dcmtk-3.6.9.orig/oficonv/include/dcmtk/oficonv/iconv.h	2025-02-18 17:20:55.796247633 +0100
++++ dcmtk-3.6.9/oficonv/include/dcmtk/oficonv/iconv.h	2025-02-18 17:36:55.957317086 +0100
 @@ -55,7 +55,12 @@
  #endif
  
@@ -85,21 +85,109 @@
  
  #ifndef OFICONV_CITRUS_WC_T_DEFINED
  #define OFICONV_CITRUS_WC_T_DEFINED
+diff -urEb dcmtk-3.6.9.orig/oficonv/libsrc/citrus_csmapper.c dcmtk-3.6.9/oficonv/libsrc/citrus_csmapper.c
+--- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_csmapper.c	2025-02-18 17:20:55.796247633 +0100
++++ dcmtk-3.6.9/oficonv/libsrc/citrus_csmapper.c	2025-02-18 17:37:31.820094708 +0100
+@@ -63,7 +63,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
+@@ -382,6 +383,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.6.9.orig/oficonv/libsrc/citrus_iconv.c dcmtk-3.6.9/oficonv/libsrc/citrus_iconv.c
+--- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_iconv.c	2025-02-18 17:20:55.806247572 +0100
++++ dcmtk-3.6.9/oficonv/libsrc/citrus_iconv.c	2025-02-18 17:37:20.974161963 +0100
+@@ -80,7 +80,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
+@@ -304,6 +305,13 @@
+     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];
 diff -urEb dcmtk-3.6.9.orig/oficonv/libsrc/citrus_lock.h dcmtk-3.6.9/oficonv/libsrc/citrus_lock.h
---- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_lock.h	2025-01-21 15:53:12.646715143 +0100
-+++ dcmtk-3.6.9/oficonv/libsrc/citrus_lock.h	2025-01-21 16:43:36.463693959 +0100
-@@ -31,7 +31,7 @@
+--- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_lock.h	2025-02-18 17:20:55.804247584 +0100
++++ dcmtk-3.6.9/oficonv/libsrc/citrus_lock.h	2025-02-18 17:37:25.701132652 +0100
+@@ -31,11 +31,11 @@
  
  #ifdef WITH_THREADS
  
 -#ifdef HAVE_WINDOWS_H
-+#if defined(HAVE_WINDOWS_H) && !defined(HAVE_PTHREAD_H)  /* Favor pthread if available, for MinGW */
++#if defined(HAVE_WINDOWS_H)
  
  #include <windows.h>
- #define WLOCK(lock)  AcquireSRWLockExclusive(lock);
+-#define WLOCK(lock)  AcquireSRWLockExclusive(lock);
+-#define UNLOCK(lock) ReleaseSRWLockExclusive(lock);
++#define WLOCK(lock)  EnterCriticalSection(lock);
++#define UNLOCK(lock) LeaveCriticalSection(lock);
+ 
+ #else /* HAVE_WINDOWS_H */
+ 
+diff -urEb dcmtk-3.6.9.orig/oficonv/libsrc/citrus_mapper.c dcmtk-3.6.9/oficonv/libsrc/citrus_mapper.c
+--- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_mapper.c	2025-02-18 17:20:55.802247596 +0100
++++ dcmtk-3.6.9/oficonv/libsrc/citrus_mapper.c	2025-02-18 17:37:15.029198826 +0100
+@@ -64,7 +64,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
+@@ -355,6 +356,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.6.9.orig/oflog/include/dcmtk/oflog/thread/syncpub.h dcmtk-3.6.9/oflog/include/dcmtk/oflog/thread/syncpub.h
---- dcmtk-3.6.9.orig/oflog/include/dcmtk/oflog/thread/syncpub.h	2025-01-21 15:53:12.605715381 +0100
-+++ dcmtk-3.6.9/oflog/include/dcmtk/oflog/thread/syncpub.h	2025-01-21 15:53:27.617627527 +0100
+--- dcmtk-3.6.9.orig/oflog/include/dcmtk/oflog/thread/syncpub.h	2025-02-18 17:20:55.761247848 +0100
++++ dcmtk-3.6.9/oflog/include/dcmtk/oflog/thread/syncpub.h	2025-02-18 17:36:55.958317080 +0100
 @@ -63,7 +63,7 @@
  
  DCMTK_LOG4CPLUS_INLINE_EXPORT
@@ -137,8 +225,8 @@
  
  
 diff -urEb dcmtk-3.6.9.orig/oflog/libsrc/oflog.cc dcmtk-3.6.9/oflog/libsrc/oflog.cc
---- dcmtk-3.6.9.orig/oflog/libsrc/oflog.cc	2025-01-21 15:53:12.606715376 +0100
-+++ dcmtk-3.6.9/oflog/libsrc/oflog.cc	2025-01-21 15:53:27.617627527 +0100
+--- dcmtk-3.6.9.orig/oflog/libsrc/oflog.cc	2025-02-18 17:20:55.764247829 +0100
++++ dcmtk-3.6.9/oflog/libsrc/oflog.cc	2025-02-18 17:36:55.958317080 +0100
 @@ -19,6 +19,11 @@
   *
   */
@@ -152,8 +240,8 @@
  #include "dcmtk/oflog/oflog.h"
  
 diff -urEb dcmtk-3.6.9.orig/ofstd/include/dcmtk/ofstd/offile.h dcmtk-3.6.9/ofstd/include/dcmtk/ofstd/offile.h
---- dcmtk-3.6.9.orig/ofstd/include/dcmtk/ofstd/offile.h	2025-01-21 15:53:12.651715114 +0100
-+++ dcmtk-3.6.9/ofstd/include/dcmtk/ofstd/offile.h	2025-01-21 15:53:27.618627521 +0100
+--- dcmtk-3.6.9.orig/ofstd/include/dcmtk/ofstd/offile.h	2025-02-18 17:20:55.809247553 +0100
++++ dcmtk-3.6.9/ofstd/include/dcmtk/ofstd/offile.h	2025-02-18 17:36:55.991316875 +0100
 @@ -569,7 +569,7 @@
     */
    void setlinebuf()
@@ -164,8 +252,8 @@
  #else
      :: setlinebuf(file_);
 diff -urEb dcmtk-3.6.9.orig/ofstd/libsrc/ofstub.cc dcmtk-3.6.9/ofstd/libsrc/ofstub.cc
---- dcmtk-3.6.9.orig/ofstd/libsrc/ofstub.cc	2025-01-21 15:53:12.652715108 +0100
-+++ dcmtk-3.6.9/ofstd/libsrc/ofstub.cc	2025-01-21 15:53:27.618627521 +0100
+--- dcmtk-3.6.9.orig/ofstd/libsrc/ofstub.cc	2025-02-18 17:20:55.810247547 +0100
++++ dcmtk-3.6.9/ofstd/libsrc/ofstub.cc	2025-02-18 17:36:55.991316875 +0100
 @@ -35,6 +35,10 @@
  #include <windows.h>
  #endif /* HAVE_WINDOWS_H */