+sg_size_t HostImpl::fileTell(surf_file_t fd)
+{
+ return fd->current_position;
+}
+
+int HostImpl::fileSeek(surf_file_t fd, sg_offset_t offset, int origin)
+{
+
+ switch (origin) {
+ case SEEK_SET:
+ fd->current_position = offset;
+ return 0;
+ case SEEK_CUR:
+ fd->current_position += offset;
+ return 0;
+ case SEEK_END:
+ fd->current_position = fd->size + offset;
+ return 0;
+ default:
+ return -1;
+ }
+}
+
+int HostImpl::fileMove(surf_file_t fd, const char* fullpath)
+{
+ /* Check if the new full path is on the same mount point */
+ if (!strncmp((const char*)fd->mount, fullpath, strlen(fd->mount))) {
+ sg_size_t* psize = (sg_size_t*)xbt_dict_get_or_null(findStorageOnMountList(fd->mount)->content_, fd->name);
+ if (psize) { // src file exists
+ sg_size_t* new_psize = xbt_new(sg_size_t, 1);
+ *new_psize = *psize;
+ xbt_dict_remove(findStorageOnMountList(fd->mount)->content_, fd->name);
+ char* path = (char*)xbt_malloc((strlen(fullpath) - strlen(fd->mount) + 1));
+ strncpy(path, fullpath + strlen(fd->mount), strlen(fullpath) - strlen(fd->mount) + 1);
+ xbt_dict_set(findStorageOnMountList(fd->mount)->content_, path, new_psize, nullptr);
+ XBT_DEBUG("Move file from %s to %s, size '%llu'", fd->name, fullpath, *psize);
+ free(path);
+ return 0;
+ } else {
+ XBT_WARN("File %s doesn't exist", fd->name);
+ return -1;