X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=direct%2Fyaffsfs.c;h=c7937b075a04aa7f22410cef1139084446caf0bc;hp=e3f6fb04d03ff15da2777fdeb08d58021761f506;hb=991af291b91f76e80019a9d81ddd6c5885aec195;hpb=43dffe06bde0c8c1e6c6a76fe140bc287f2acad4 diff --git a/direct/yaffsfs.c b/direct/yaffsfs.c index e3f6fb0..c7937b0 100644 --- a/direct/yaffsfs.c +++ b/direct/yaffsfs.c @@ -1183,6 +1183,7 @@ int yaffs_truncate(const YCHAR *path,off_t new_size) yaffsfs_Lock(); obj = yaffsfs_FindObject(NULL,path,0,1,&dir,¬Dir,&loop); + obj = yaffsfs_FollowLink(obj,0,&loop); if(!dir && notDir) yaffsfs_SetError(-ENOTDIR); @@ -1962,7 +1963,9 @@ int yaffs_access(const YCHAR *path, int amode) yaffsfs_SetError(-ELOOP); else if(!dir || !obj) yaffsfs_SetError(-ENOENT); - else { + else if((amode & W_OK) && obj->my_dev->read_only) + yaffsfs_SetError(-EROFS); + else{ int access_ok = 1; if((amode & R_OK) && !(obj->yst_mode & S_IREAD)) @@ -2006,6 +2009,7 @@ int yaffs_chmod(const YCHAR *path, mode_t mode) yaffsfs_Lock(); obj = yaffsfs_FindObject(NULL,path,0,1, &dir, ¬Dir,&loop); + obj = yaffsfs_FollowLink(obj,0,&loop); if(!dir && notDir) yaffsfs_SetError(-ENOTDIR);