X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmUtil.cxx;h=35384b64b2dd1ebbf2ac592d2ebd140fe0200490;hb=d6b4e16455871f3d41fbddbbb305a2210d80bf02;hp=d36add49ee6f54065a17d49f20769ac6e46b9b95;hpb=9ca0e4bb2208be93bebf21d0c5d75c8018e7605a;p=gdcm.git diff --git a/src/gdcmUtil.cxx b/src/gdcmUtil.cxx index d36add49..35384b64 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/06/24 10:55:59 $ - Version: $Revision: 1.155 $ + Date: $Date: 2005/10/24 22:49:57 $ + Version: $Revision: 1.168 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -36,7 +36,10 @@ #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) #include // for gethostname and gethostbyname and GetTickCount... -#ifndef __BORLANDC__ +// I haven't find a way to determine wether we need to under GetCurrentTime or not... +// I think the best solution would simply to get rid of this problematic function +// and use a 'less' common name... +#if !defined(__BORLANDC__) || (__BORLANDC__ >= 0x0560) #undef GetCurrentTime #endif #else @@ -92,7 +95,13 @@ namespace gdcm //------------------------------------------------------------------------- const std::string Util::GDCM_UID = "1.2.826.0.1.3680043.2.1143"; std::string Util::RootUID = GDCM_UID; -const uint16_t Util::FMIV = 0x0001; +/* + * File Meta Information Version (0002,0001) shall contain a two byte OB + * value consisting of a 0x00 byte, followed by 0x01 byte, and not the + * value 0x0001 encoded as a little endian 16 bit short value, + * which would be the other way around... + */ +const uint16_t Util::FMIV = 0x0100; uint8_t *Util::FileMetaInformationVersion = (uint8_t *)&FMIV; std::string Util::GDCM_MAC_ADRESS = GetMACAddress(); @@ -176,10 +185,46 @@ int Util::CountSubstring (const std::string &str, return count; } +/** + * \brief Checks whether a 'string' is printable or not (in order + * to avoid corrupting the terminal of invocation when printing) + * @param s string to check + */ +bool Util::IsCleanString(std::string const &s) +{ + std::cout<< std::endl << s << std::endl; + for(unsigned int i=0; i s2_even; + case GDCM_GREATEROREQUAL : + return s1_even >= s2_even; + case GDCM_LESS : + return s1_even < s2_even; + case GDCM_LESSOREQUAL : + return s1_even <= s2_even; + default : + gdcmDebugMacro(" Wrong operator : " << op); + return false; + } +} + #ifdef _WIN32 typedef BOOL(WINAPI * pSnmpExtensionInit) ( IN DWORD dwTimeZeroReference, @@ -457,9 +561,10 @@ int GetMacAddrSys ( unsigned char *addr ) { #ifdef _WIN32 WSADATA WinsockData; - if ( (WSAStartup(MAKEWORD(2, 0), &WinsockData)) != 0) + if ( (WSAStartup(MAKEWORD(2, 0), &WinsockData)) != 0 ) { - std::cerr << "This program requires Winsock 2.x!" << std::endl; + std::cerr << "in Get MAC Adress (internal) : This program requires Winsock 2.x!" + << std::endl; return -1; } @@ -553,7 +658,8 @@ int GetMacAddrSys ( unsigned char *addr ) && (varBind[1].value.asnValue.address.stream[4] == 0x00) ) { // Ignore all dial-up networking adapters - std::cerr << "Interface #" << j << " is a DUN adapter\n"; + std::cerr << "in Get MAC Adress (internal) : Interface #" + << j << " is a DUN adapter\n"; continue; } if ( (varBind[1].value.asnValue.address.stream[0] == 0x00) @@ -565,7 +671,8 @@ int GetMacAddrSys ( unsigned char *addr ) { // Ignore NULL addresses returned by other network // interfaces - std::cerr << "Interface #" << j << " is a NULL address\n"; + std::cerr << "in Get MAC Adress (internal) : Interface #" + << j << " is a NULL address\n"; continue; } memcpy( addr, varBind[1].value.asnValue.address.stream, 6); @@ -594,7 +701,7 @@ int GetMacAddrSys ( unsigned char *addr ) if (gethostname(hostname, MAXHOSTNAMELEN) != 0 ) { - perror("gethostname"); + perror("in Get MAC Adress (internal) : gethostname"); return -1; } phost = gethostbyname(hostname); @@ -603,7 +710,7 @@ int GetMacAddrSys ( unsigned char *addr ) sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sock == -1 ) { - perror("sock"); + perror("in Get MAC Adress (internal) : sock"); return -1; } memset(&parpreq, 0, sizeof(struct arpreq)); @@ -616,7 +723,7 @@ int GetMacAddrSys ( unsigned char *addr ) status = ioctl(sock, SIOCGARP, &parpreq); if (status == -1 ) { - perror("SIOCGARP"); + perror("in Get MAC Adress (internal) : SIOCGARP"); return -1; } memcpy(addr, parpreq.arp_ha.sa_data, 6); @@ -639,7 +746,7 @@ int GetMacAddrSys ( unsigned char *addr ) // max(sizeof(ifreq), sizeof(ifreq.ifr_name)+ifreq.ifr_addr.sa_len // However, under earlier systems, sa_len isn't present, so the size is // just sizeof(struct ifreq) -// We should investiage the use of SIZEOF_ADDR_IFREQ +// We should investigate the use of SIZEOF_ADDR_IFREQ // #ifdef HAVE_SA_LEN #ifndef max @@ -689,7 +796,7 @@ int GetMacAddrSys ( unsigned char *addr ) continue; a = (unsigned char *) &sdlp->sdl_data[sdlp->sdl_nlen]; #else - perror("No way to access hardware"); + perror("in Get MAC Adress (internal) : No way to access hardware"); close(sd); return -1; #endif // AF_LINK @@ -707,7 +814,7 @@ int GetMacAddrSys ( unsigned char *addr ) close(sd); #endif // Not implemented platforms - perror("There was a configuration problem on your plateform"); + perror("in Get MAC Adress (internal) : There was a configuration problem on your plateform"); memset(addr,0,6); return -1; #endif //__sun @@ -795,7 +902,7 @@ std::string Util::CreateUniqueUID(const std::string &root) append += Util::GDCM_MAC_ADRESS; append += "."; append += Util::GetCurrentDateTime(); - + append += "."; //Also add a mini random number just in case: char tmp[10]; int r = (int) (100.0*rand()/RAND_MAX); @@ -838,9 +945,7 @@ std::ostream &binary_write(std::ostream &os, const uint16_t &val) { #if defined(GDCM_WORDS_BIGENDIAN) || defined(GDCM_FORCE_BIGENDIAN_EMULATION) uint16_t swap; - //swap = ((( val << 8 ) & 0xff00 ) | (( val >> 8 ) & 0x00ff ) ); - //save CPU time - swap = ( val << 8 | val >> 8 ); + swap = ( val << 8 | val >> 8 ); return os.write(reinterpret_cast(&swap), 2); #else @@ -857,9 +962,6 @@ std::ostream &binary_write(std::ostream &os, const uint32_t &val) { #if defined(GDCM_WORDS_BIGENDIAN) || defined(GDCM_FORCE_BIGENDIAN_EMULATION) uint32_t swap; -// swap = ( ((val<<24) & 0xff000000) | ((val<<8) & 0x00ff0000) | -// ((val>>8) & 0x0000ff00) | ((val>>24) & 0x000000ff) ); -// save CPU time swap = ( (val<<24) | ((val<<8) & 0x00ff0000) | ((val>>8) & 0x0000ff00) | (val>>24) ); return os.write(reinterpret_cast(&swap), 4);