-// Copyright (C) 2007-2019 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
#include "utilities.h"
#include "Basics_DirUtils.hxx"
+#include "Basics_Utils.hxx"
#ifndef WIN32
#include <sys/time.h>
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);
}
{
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
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
const std::vector<std::string>& 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);
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
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);
aCurrentPos = 4;
for(i=0; i<aLength; i++) {
- std::ifstream *aFile;
+ std::ifstream *aFile;
if (!theNamesOnly) { // mpv 15.01.2003: we don't open any file if theNamesOnly = true
std::string aFullPath = aTmpDir + theFiles[i];
if(!Exists(aFullPath)) continue;
#ifdef WIN32
+#ifdef UNICODE
+ aFile = new std::ifstream (Kernel_Utils::utf8_decode_s(aFullPath).c_str(), std::ios::binary);
+#else
aFile = new std::ifstream(aFullPath.c_str(), std::ios::binary);
+#endif
#else
aFile = new std::ifstream(aFullPath.c_str());
#endif
aCurrentPos += 8;
aFile->seekg(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];
//Get a temporary directory for saving a file
std::string aTmpDir = theToDirectory;
-
unsigned char *aBuffer = (unsigned char*)theStream.NP_data();
if(aBuffer == NULL)
//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;
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;
}
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;
}
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+"/";
if(path.size() == 2 && path[1] == ':') path +='\\';
#endif
- for(int i = 0, len = path.size(); i<len; i++)
+ for(size_t i = 0, len = path.size(); i<len; i++)
if(path[i] == '|') path[i] = '/';
return path;
}
// Purpose : Retrieve specified flaf from "AttributeFlags" attribute
//=======================================================================
bool SALOMEDS_Tool::GetFlag( const int theFlag,
- SALOMEDS::Study_var theStudy,
+ SALOMEDS::Study_var /*theStudy*/,
SALOMEDS::SObject_var theObj )
{
SALOMEDS::GenericAttribute_var anAttr;