size_t found=fullname.find('/');
//in case no fullpath is provided ... just pick the first mountpoint.
- if(found==std::string::npos){
+ if(found==std::string::npos || fullname.rfind("./", 1) != std::string::npos){
auto disk = simgrid::s4u::Host::current()->get_disks().front();
std::string mount;
if (disk->get_host() != simgrid::s4u::Host::current())
else
mount = disk->extension<simgrid::s4u::FileSystemDiskExt>()->get_mount_point();
XBT_DEBUG("No absolute path given for file opening, use '%s'", mount.c_str());
- mount.append("/");
- fullname.insert(0, mount);
+ if(fullname.rfind("./",1) != std::string::npos)
+ fullname.replace(fullname.begin(), fullname.begin() + 1, mount);
+ else{
+ mount.append("/");
+ fullname.insert(0, mount);
+ }
}
file_= new simgrid::s4u::File(fullname, nullptr);
int File::seek_shared(MPI_Offset offset, int whence){
shared_mutex_->lock();
seek(offset,whence);
- *shared_file_pointer_=offset;
+ *shared_file_pointer_=file_->tell();
shared_mutex_->unlock();
return MPI_SUCCESS;
}
int File::write_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status){
fh->shared_mutex_->lock();
+ XBT_DEBUG("Write shared on %s - Shared ptr before : %lld",fh->file_->get_path(), *(fh->shared_file_pointer_));
fh->seek(*(fh->shared_file_pointer_),MPI_SEEK_SET);
write(fh, const_cast<void*>(buf), count, datatype, status);
*(fh->shared_file_pointer_)=fh->file_->tell();
+ XBT_DEBUG("Write shared on %s - Shared ptr after : %lld",fh->file_->get_path(), *(fh->shared_file_pointer_));
fh->shared_mutex_->unlock();
return MPI_SUCCESS;
}
if (errhandler_ != MPI_ERRHANDLER_NULL)
errhandler_->ref();
}
+
+ File* File::f2c(int id){
+ return static_cast<File*>(F2C::f2c(id));
+ }
}
}