X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmUtil.cxx;h=14b4d52e7622843e2e5a944a81234ed75f9809ea;hb=0ad9dae4659b21bfd5c834c1af724eab4dcdf4f6;hp=cbaa71b6de46ff00220bba5c3cf7cd53727c3022;hpb=d6e77ac1b3e594f70ce73df711ad6ec6969f6791;p=gdcm.git diff --git a/src/gdcmUtil.cxx b/src/gdcmUtil.cxx index cbaa71b6..14b4d52e 100644 --- a/src/gdcmUtil.cxx +++ b/src/gdcmUtil.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmUtil.cxx,v $ Language: C++ - Date: $Date: 2005/01/21 20:02:46 $ - Version: $Revision: 1.116 $ + Date: $Date: 2005/01/23 10:12:34 $ + Version: $Revision: 1.122 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -25,7 +25,7 @@ #include #include -#ifdef _MSC_VER +#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) #include #else #include @@ -284,23 +284,23 @@ std::string Util::GetCurrentDateTime() { char tmp[40]; long milliseconds; - time_t *timep; + time_t timep; // We need implementation specific functions to obtain millisecond precision #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) struct timeb tb; ::ftime(&tb); - timep = &tb.time; + timep = tb.time; milliseconds = tb.millitm; #else struct timeval tv; gettimeofday (&tv, NULL); - timep = &tv.tv_sec; + timep = tv.tv_sec; // Compute milliseconds from microseconds. milliseconds = tv.tv_usec / 1000; #endif // Obtain the time of day, and convert it to a tm struct. - struct tm *ptm = localtime (timep); + struct tm *ptm = localtime (&timep); // Format the date and time, down to a single second. strftime (tmp, sizeof (tmp), "%Y%m%d%H%M%S", ptm); @@ -328,13 +328,13 @@ std::string Util::DicomString(const char *s, size_t l) /** * \brief Create a /DICOM/ string: - * It should a of even lenght (no odd length ever) + * It should a of even length (no odd length ever) * It can contain as many (if you are reading this from your * editor the following character is is backslash followed by zero * that needed to be escaped with an extra backslash for doxygen) \\0 * as you want. * This function is similar to DicomString(const char*), - * except it doesn't take a lenght. + * except it doesn't take a length. * It only pad with a null character if length is odd */ std::string Util::DicomString(const char *s) @@ -351,8 +351,8 @@ std::string Util::DicomString(const char *s) /** * \brief Safely compare two Dicom String: - * - Both string should be of even lenght - * - We allow padding of even lenght string by either a null + * - Both string should be of even length + * - We allow padding of even length string by either a null * character of a space */ bool Util::DicomStringEqual(const std::string &s1, const char *s2) @@ -367,8 +367,6 @@ bool Util::DicomStringEqual(const std::string &s1, const char *s2) return s1_even == s2_even; } - - /** * \brief tells us if the processor we are working with is BigEndian or not */ @@ -678,15 +676,25 @@ std::string Util::GetMACAddress() // 3 OS: Win32, SunOS and 'real' POSIX // http://groups-beta.google.com/group/comp.unix.solaris/msg/ad36929d783d63be // http://bdn.borland.com/article/0,1410,26040,00.html - union dual { uint64_t n; unsigned char addr[6]; }; + unsigned char addr[6]; + uint64_t n = 0; - // zero-initialize the whole thing first: - dual d = { 0 }; - int stat = GetMacAddrSys(d.addr); + int stat = GetMacAddrSys(addr); if (stat == 0) { - // fill with zero to fit on 15 bytes. - return Format("%015llu", d.n); + // Horner evaluation + for(int i=0; i<6; i++) + { + n *= 256; + n += addr[i]; + } + + // we fit on 15 bytes maximum < 256^6. +#if defined(_MSC_VER) || defined(__BORLANDC__) + return Format("%I64u", n); +#else + return Format("%llu", n); +#endif } else { @@ -810,6 +818,9 @@ unsigned int Util::GetCurrentThreadID() #endif #ifdef __sun return (unsigned int)thr_self(); +#else + //default implementation + return 0; #endif }