]> Creatis software - clitk.git/blobdiff - common/clitkXdrImageIOWriter.cxx
Add 2 options to clitkImage2Dicom
[clitk.git] / common / clitkXdrImageIOWriter.cxx
old mode 100755 (executable)
new mode 100644 (file)
index a9eb77b..6eae6a5
@@ -41,7 +41,7 @@
 //From portdefs.h
 #if defined(unix) || defined(__APPLE__)
 #define O_BINARY 0
-#define setmode(a,b) 0
+//#define setmode(a,b) 0 // comment by ds
 #endif
 
 #ifndef __LARGE__
@@ -97,15 +97,18 @@ void clitk::XdrImageIO::Write(const void* buffer)
 #include <math.h>
 #include <stdlib.h>
 #include <limits.h>
-#if !defined(unix) && !defined(__APPLE__)
-#include <io.h>
+#ifndef _WIN32
+#  include <unistd.h>
+#endif
+#ifdef _WIN32
+#  include <io.h>
 #endif
 #include <fcntl.h>
 #include <errno.h>
 
 #include <algorithm>
 
-#ifdef WIN32
+#ifdef _WIN32
 // don't use min() and max() macros indirectly defined by windows.h,
 // but use portable std::min() and std:max() instead
 #ifndef NOMINMAX
@@ -253,7 +256,7 @@ static int wxdr_write(int handle, const void * buf, unsigned len)
 {
   // if (handle == 1) // stdout
   if (handle == fileno(stdout)) {
-#ifdef WIN32
+#ifdef _WIN32
     // Behave as C standard library write(): return number of bytes
     // written or -1 and errno set on error.
     fflush(stdout);
@@ -834,6 +837,12 @@ void clitk::XdrImageIO::WriteImage(const char* file, char* headerinfo, char* hea
   char     *buf2;
   size_t   slen;
 
+#ifdef _WIN32
+  int oldFMode;
+  _get_fmode(&oldFMode);
+  _set_fmode(O_BINARY); /* default binary i/o */
+#endif
+
   if (bLittleEndian)
     swap_test = 0x00000001;
 
@@ -948,7 +957,7 @@ void clitk::XdrImageIO::WriteImage(const char* file, char* headerinfo, char* hea
 
   for (i=0; i<GetNumberOfDimensions(); i++) {
     if (!raw) {
-      sprintf(temp, "dim%d=%d\n", i+1, GetDimensions(i));
+      sprintf(temp, "dim%d=%lu\n", i+1, GetDimensions(i));
       slen = strlen(temp);
       if (!checked_write(f, temp, slen, buffer)) {
         free(pCompressed);
@@ -1200,5 +1209,10 @@ WRITE_COORDS:
     if (f != fileno(stdout)) close(f);
 
   if (getsize) return;
+
+#ifdef _WIN32
+  _set_fmode(oldFMode ? oldFMode : _O_TEXT); /* restore default binary i/o */
+#endif
+
   return AVS_OK;
 }