X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FTOOLSDS%2FSALOMEDS_Tool.cxx;h=2b61d3fddcb726106b06b87a1c5049cdbd34e6a6;hb=d8edd4804d9e6513a17c497c1a30326d4ba0d677;hp=6fffff1fe6aba67810fe0475aa3d748e59827191;hpb=dc4b16b9dd53dd42139fd22ef26556861db58989;p=modules%2Fkernel.git diff --git a/src/TOOLSDS/SALOMEDS_Tool.cxx b/src/TOOLSDS/SALOMEDS_Tool.cxx index 6fffff1fe..2b61d3fdd 100644 --- a/src/TOOLSDS/SALOMEDS_Tool.cxx +++ b/src/TOOLSDS/SALOMEDS_Tool.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -30,6 +30,7 @@ #include "utilities.h" #include "Basics_DirUtils.hxx" +#include "Basics_Utils.hxx" #ifndef WIN32 #include @@ -50,17 +51,7 @@ bool Exists(const std::string thePath) { -#ifdef WIN32 - if ( GetFileAttributes ( thePath.c_str() ) == 0xFFFFFFFF ) { - if ( GetLastError () == ERROR_FILE_NOT_FOUND ) { - return false; - } - } -#else - int status = access ( thePath.c_str() , F_OK ); - if (status != 0) return false; -#endif - return true; + return Kernel_Utils::IsExists(thePath); } @@ -136,14 +127,19 @@ void SALOMEDS_Tool::RemoveTemporaryFiles(const std::string& theDirectory, { std::string aDirName = theDirectory; - int i, aLength = theFiles.size(); + size_t i, aLength = theFiles.size(); for(i=1; i<=aLength; i++) { std::string aFile(aDirName); aFile += theFiles[i-1]; if(!Exists(aFile)) continue; #ifdef WIN32 - DeleteFile(aFile.c_str()); +#if defined(UNICODE) + std::wstring aFileToDelete = Kernel_Utils::utf8_decode_s(aFile); +#else + std::string aFileToDelete = aFile; +#endif + DeleteFile(aFileToDelete.c_str()); #else unlink(aFile.c_str()); #endif @@ -152,7 +148,12 @@ void SALOMEDS_Tool::RemoveTemporaryFiles(const std::string& theDirectory, if(IsDirDeleted) { if(Exists(aDirName)) { #ifdef WIN32 - RemoveDirectory(aDirName.c_str()); +#if defined(UNICODE) + std::wstring aDirToDelete = Kernel_Utils::utf8_decode_s(aDirName); +#else + std::string aDirToDelete = aDirName; +#endif + RemoveDirectory(aDirToDelete.c_str()); #else rmdir(aDirName.c_str()); #endif @@ -173,7 +174,7 @@ namespace const std::vector& theFileNames, const int theNamesOnly) { - int i, aLength = theFiles.size(); + int i, aLength = (int)theFiles.size(); //!< TODO: conversion from size_t to int if(aLength == 0) return (new SALOMEDS::TMPFile); @@ -197,15 +198,19 @@ namespace std::string aFullPath = aTmpDir + theFiles[i]; if(!Exists(aFullPath)) continue; #ifdef WIN32 +#ifdef UNICODE + std::ifstream aFile(Kernel_Utils::utf8_decode_s(aFullPath).c_str(), std::ios::binary); +#else std::ifstream aFile(aFullPath.c_str(), std::ios::binary); +#endif #else std::ifstream aFile(aFullPath.c_str()); #endif aFile.seekg(0, std::ios::end); - aFileSize[i] = aFile.tellg(); + aFileSize[i] = (long)aFile.tellg(); //!< TODO: conversion from std::streamoff to long aBufferSize += aFileSize[i]; //Add a space to store the file } - aFileNameSize[i] = theFileNames[i].length()+1; + aFileNameSize[i] = (int)theFileNames[i].length()+1; //!< TODO: conversion from size_t to int aBufferSize += aFileNameSize[i]; //Add a space to store the file name aBufferSize += (theNamesOnly)?4:12; //Add 4 bytes: a length of the file name, // 8 bytes: length of the file itself @@ -214,7 +219,8 @@ namespace if ( aNbFiles == 0 ) return (new SALOMEDS::TMPFile); aBufferSize += 4; //4 bytes for a number of the files that will be written to the stream; - unsigned char* aBuffer = new unsigned char[aBufferSize]; + unsigned char* aBuffer = new unsigned char[aBufferSize]; + if(aBuffer == NULL) return (new SALOMEDS::TMPFile); @@ -227,12 +233,16 @@ namespace aCurrentPos = 4; for(i=0; iseekg(0, std::ios::beg); - aFile->read((char *)(aBuffer + aCurrentPos), aFileSize[i]); + aFile->read((char *)(aBuffer + aCurrentPos), aFileSize[i]); aFile->close(); delete(aFile); aCurrentPos += aFileSize[i]; @@ -307,7 +317,6 @@ SALOMEDS_Tool::PutStreamToFiles(const SALOMEDS::TMPFile& theStream, //Get a temporary directory for saving a file std::string aTmpDir = theToDirectory; - unsigned char *aBuffer = (unsigned char*)theStream.NP_data(); if(aBuffer == NULL) @@ -331,10 +340,10 @@ SALOMEDS_Tool::PutStreamToFiles(const SALOMEDS::TMPFile& theStream, //Put a file name to aFileName memcpy(aFileName, (aBuffer + aCurrentPos), aFileNameSize); #ifdef WIN32 - for (int i = 0; i < strlen(aFileName); i++) + for (int j = 0; j < strlen(aFileName); j++) { - if (aFileName[i] == ':') - aFileName[i] = '_'; + if (aFileName[j] == ':') + aFileName[j] = '_'; } #endif aCurrentPos += aFileNameSize; @@ -346,11 +355,15 @@ SALOMEDS_Tool::PutStreamToFiles(const SALOMEDS::TMPFile& theStream, std::string aFullPath = aTmpDir + aFileName; #ifdef WIN32 +#ifdef UNICODE + std::ofstream aFile(Kernel_Utils::utf8_decode_s(aFullPath).c_str(), std::ios::binary); +#else std::ofstream aFile(aFullPath.c_str(), std::ios::binary); +#endif #else std::ofstream aFile(aFullPath.c_str()); #endif - aFile.write((char *)(aBuffer+aCurrentPos), aFileSize); + aFile.write((char *)(aBuffer + aCurrentPos), aFileSize); aFile.close(); aCurrentPos += aFileSize; } @@ -369,25 +382,25 @@ std::string SALOMEDS_Tool::GetNameFromPath(const std::string& thePath) { if (thePath.empty()) return ""; std::string aPath = thePath; bool isFound = false; - int pos = aPath.rfind('/'); - if(pos > 0) { + size_t pos = aPath.rfind('/'); + if(pos != std::string::npos) { aPath = aPath.substr(pos+1, aPath.size()); isFound = true; } if(!isFound) { pos = aPath.rfind('\\'); - if(pos > 0) { + if(pos != std::string::npos) { aPath = aPath.substr(pos+1, aPath.size()); isFound = true; } } if(!isFound) { pos = aPath.rfind('|'); - if(pos > 0) aPath = aPath.substr(pos+1, aPath.size()); + if(pos != std::string::npos) aPath = aPath.substr(pos+1, aPath.size()); } pos = aPath.rfind('.'); - if(pos > 0) aPath = aPath.substr(0, pos); //Remove extension + if(pos != std::string::npos) aPath = aPath.substr(0, pos); //Remove extension return aPath; } @@ -399,18 +412,18 @@ std::string SALOMEDS_Tool::GetNameFromPath(const std::string& thePath) { std::string SALOMEDS_Tool::GetDirFromPath(const std::string& thePath) { if (thePath.empty()) return ""; - int pos = thePath.rfind('/'); + size_t pos = thePath.rfind('/'); std::string path; - if(pos > 0) { + if(pos != std::string::npos) { path = thePath.substr(0, pos+1); } if(path.empty()) { pos = thePath.rfind('\\'); - if(pos > 0) path = thePath.substr(0, pos+1); + if(pos != std::string::npos) path = thePath.substr(0, pos+1); } if(path.empty()) { pos = thePath.rfind('|'); - if(pos > 0) path = thePath.substr(0, pos+1); + if(pos != std::string::npos) path = thePath.substr(0, pos+1); } if(path.empty()) { path = thePath+"/"; @@ -420,7 +433,7 @@ std::string SALOMEDS_Tool::GetDirFromPath(const std::string& thePath) { if(path.size() == 2 && path[1] == ':') path +='\\'; #endif - for(int i = 0, len = path.size(); i