X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHUtils%2FSMESH_File.cxx;h=9cd05397b9d343fd42747beffdceb84c5e7db531;hb=6ca4db2d7c49474a93e30c02bef83f05b354e540;hp=d4311bb71ef29464b7b926b689e2f1bbbc5dfa61;hpb=75d61804dc733ab5c810e416dec646406af11422;p=modules%2Fsmesh.git diff --git a/src/SMESHUtils/SMESH_File.cxx b/src/SMESHUtils/SMESH_File.cxx index d4311bb71..9cd05397b 100644 --- a/src/SMESHUtils/SMESH_File.cxx +++ b/src/SMESHUtils/SMESH_File.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -36,6 +36,8 @@ #include +#include + namespace boofs = boost::filesystem; //================================================================================ @@ -75,13 +77,21 @@ SMESH_File::~SMESH_File() bool SMESH_File::open() { - int length = size(); + long length = size(); if ( !_map && length > 0 ) { #ifdef WIN32 - _file = CreateFile(_name.data(), GENERIC_READ, FILE_SHARE_READ, +#ifdef UNICODE + const wchar_t* name = Kernel_Utils::decode(_name.data()); +#else + char* name = name.data(); +#endif + _file = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); bool ok = ( _file != INVALID_HANDLE_VALUE ); +#ifdef UNICODE + delete name; +#endif #else _file = ::open(_name.data(), O_RDONLY ); bool ok = ( _file >= 0 ); @@ -188,7 +198,7 @@ long SMESH_File::size() boost::uintmax_t size = boofs::file_size( _name, err ); _error = err.message(); - return err ? -1 : (long) size; + return !err ? (long) size : -1; } //================================================================================ @@ -271,7 +281,7 @@ void SMESH_File::rewind() bool SMESH_File::getInts(std::vector& ints) { - int i = 0; + size_t i = 0; while ( i < ints.size() ) { while ( !isdigit( *_pos ) && !eof()) ++_pos; @@ -291,14 +301,21 @@ bool SMESH_File::getInts(std::vector& ints) bool SMESH_File::openForWriting() { #ifdef WIN32 - - _file = CreateFile( _name.c_str(), // name of the write +#ifdef UNICODE + const wchar_t* name = Kernel_Utils::decode(_name.data()); +#else + char* name = name.data(); +#endif + _file = CreateFile( name, // name of the write GENERIC_WRITE, // open for writing 0, // do not share NULL, // default security OPEN_ALWAYS, // CREATE NEW or OPEN EXISTING FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no attr. template +#ifdef UNICODE + delete name; +#endif return ( _file != INVALID_HANDLE_VALUE ); #else @@ -330,7 +347,7 @@ bool SMESH_File::writeRaw(const void* data, size_t size) #else ssize_t nbWritten = ::write( _file, data, size ); - return ( nbWritten == size ); + return ( nbWritten == (ssize_t) size ); #endif }