mfs<->vfs stat fallback for old vfs

This commit is contained in:
Ben Gras 2011-07-12 18:09:52 +02:00
parent ef0a265086
commit 253c293213

View file

@ -8,6 +8,24 @@
#include "super.h"
#include <minix/vfsif.h>
PRIVATE int copy_new_to_old_stat(endpoint_t who_e,
cp_grant_id_t gid, struct stat *st)
{
struct minix_prev_stat prevst;
memset(&prevst, 0, sizeof(prevst));
prevst.st_dev = st->st_dev;
prevst.st_ino = st->st_ino;
prevst.st_mode = st->st_mode;
prevst.st_uid = st->st_uid;
prevst.st_gid = st->st_gid;
prevst.st_size = st->st_size;
prevst.st_rdev = st->st_rdev;
return sys_safecopyto(who_e, gid, (vir_bytes) 0, (vir_bytes) &prevst,
(size_t) sizeof(prevst), D);
}
/*===========================================================================*
* stat_inode *
@ -57,11 +75,17 @@ PRIVATE int stat_inode(
/* Copy the struct to user space. */
r = sys_safecopyto(who_e, gid, (vir_bytes) 0, (vir_bytes) &statbuf,
(size_t) sizeof(statbuf), D);
/* Fallback for older VFS (old stat) */
if(r != OK) {
r = copy_new_to_old_stat(who_e, gid, &statbuf);
if(r == OK) printf("MFS: old vfs stat fallback ok\n");
else printf("MFS: old vfs stat fallback failed\n");
}
return(r);
}
/*===========================================================================*
* fs_fstatfs *
*===========================================================================*/