projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
yaffs Fixed some tests in direct/timothy_tests/quick_tests
[yaffs2.git]
/
direct
/
yaffsfs.c
diff --git
a/direct/yaffsfs.c
b/direct/yaffsfs.c
index e3f6fb04d03ff15da2777fdeb08d58021761f506..e212d0b4d50735f3641a5aa51f3e0b8933ec024e 100644
(file)
--- a/
direct/yaffsfs.c
+++ b/
direct/yaffsfs.c
@@
-756,6
+756,13
@@
int yaffs_open_sharing(const YCHAR *path, int oflag, int mode, int sharing)
if( writeRequested && !(obj->yst_mode & S_IWRITE))
openDenied = 1;
if( writeRequested && !(obj->yst_mode & S_IWRITE))
openDenied = 1;
+ if( !errorReported && writeRequested &&
+ obj->my_dev->read_only){
+ openDenied = 1;
+ yaffsfs_SetError(-EROFS);
+ errorReported = 1;
+ }
+
if(openDenied && !errorReported ) {
/* Error if the file exists but permissions are refused. */
yaffsfs_SetError(-EACCES);
if(openDenied && !errorReported ) {
/* Error if the file exists but permissions are refused. */
yaffsfs_SetError(-EACCES);
@@
-820,7
+827,7
@@
int yaffs_open_sharing(const YCHAR *path, int oflag, int mode, int sharing)
if(!obj && dir && !errorReported && (oflag & O_CREAT)) {
/* Let's see if we can create this file if it does not exist. */
if(dir->my_dev->read_only){
if(!obj && dir && !errorReported && (oflag & O_CREAT)) {
/* Let's see if we can create this file if it does not exist. */
if(dir->my_dev->read_only){
- yaffsfs_SetError(-E
INVAL
);
+ yaffsfs_SetError(-E
ROFS
);
errorReported = 1;
} else
obj = yaffs_create_file(dir,name,mode,0,0);
errorReported = 1;
} else
obj = yaffs_create_file(dir,name,mode,0,0);
@@
-881,19
+888,23
@@
int yaffs_open(const YCHAR *path, int oflag, int mode)
int yaffs_Dofsync(int fd,int datasync)
{
yaffsfs_Handle *h = NULL;
int yaffs_Dofsync(int fd,int datasync)
{
yaffsfs_Handle *h = NULL;
- int retVal =
0
;
+ int retVal =
-1
;
yaffsfs_Lock();
h = yaffsfs_GetHandlePointer(fd);
yaffsfs_Lock();
h = yaffsfs_GetHandlePointer(fd);
- if(h && h->useCount > 0)
- /* flush the file */
- yaffs_flush_file(yaffsfs_inode[h->inodeId].iObj,1,datasync);
- else {
- /* bad handle */
+ if(!h || h->useCount < 1)
yaffsfs_SetError(-EBADF);
yaffsfs_SetError(-EBADF);
- retVal = -1;
+ else {
+ struct yaffs_obj * obj;
+ obj = yaffsfs_inode[h->inodeId].iObj;
+ if(obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else {
+ yaffs_flush_file(yaffsfs_inode[h->inodeId].iObj,1,datasync);
+ retVal = 0;
+ }
}
yaffsfs_Unlock();
}
yaffsfs_Unlock();
@@
-1183,6
+1194,7
@@
int yaffs_truncate(const YCHAR *path,off_t new_size)
yaffsfs_Lock();
obj = yaffsfs_FindObject(NULL,path,0,1,&dir,¬Dir,&loop);
yaffsfs_Lock();
obj = yaffsfs_FindObject(NULL,path,0,1,&dir,¬Dir,&loop);
+ obj = yaffsfs_FollowLink(obj,0,&loop);
if(!dir && notDir)
yaffsfs_SetError(-ENOTDIR);
if(!dir && notDir)
yaffsfs_SetError(-ENOTDIR);
@@
-1190,6
+1202,8
@@
int yaffs_truncate(const YCHAR *path,off_t new_size)
yaffsfs_SetError(-ELOOP);
else if(!dir || !obj)
yaffsfs_SetError(-ENOENT);
yaffsfs_SetError(-ELOOP);
else if(!dir || !obj)
yaffsfs_SetError(-ENOENT);
+ else if(obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
else if(obj->variant_type != YAFFS_OBJECT_TYPE_FILE)
yaffsfs_SetError(-EISDIR);
else if(obj->my_dev->read_only)
else if(obj->variant_type != YAFFS_OBJECT_TYPE_FILE)
yaffsfs_SetError(-EISDIR);
else if(obj->my_dev->read_only)
@@
-1218,7
+1232,7
@@
int yaffs_ftruncate(int fd, off_t new_size)
/* bad handle */
yaffsfs_SetError(-EBADF);
else if(obj->my_dev->read_only)
/* bad handle */
yaffsfs_SetError(-EBADF);
else if(obj->my_dev->read_only)
- yaffsfs_SetError(-E
ACCE
S);
+ yaffsfs_SetError(-E
ROF
S);
else if( new_size < 0 || new_size > YAFFS_MAX_FILE_SIZE)
yaffsfs_SetError(-EINVAL);
else
else if( new_size < 0 || new_size > YAFFS_MAX_FILE_SIZE)
yaffsfs_SetError(-EINVAL);
else
@@
-1962,7
+1976,9
@@
int yaffs_access(const YCHAR *path, int amode)
yaffsfs_SetError(-ELOOP);
else if(!dir || !obj)
yaffsfs_SetError(-ENOENT);
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))
int access_ok = 1;
if((amode & R_OK) && !(obj->yst_mode & S_IREAD))
@@
-2006,6
+2022,7
@@
int yaffs_chmod(const YCHAR *path, mode_t mode)
yaffsfs_Lock();
obj = yaffsfs_FindObject(NULL,path,0,1, &dir, ¬Dir,&loop);
yaffsfs_Lock();
obj = yaffsfs_FindObject(NULL,path,0,1, &dir, ¬Dir,&loop);
+ obj = yaffsfs_FollowLink(obj,0,&loop);
if(!dir && notDir)
yaffsfs_SetError(-ENOTDIR);
if(!dir && notDir)
yaffsfs_SetError(-ENOTDIR);
@@
-2190,15
+2207,17
@@
int yaffs_sync(const YCHAR *path)
yaffsfs_Lock();
dev = yaffsfs_FindDevice(path,&dummy);
if(dev){
yaffsfs_Lock();
dev = yaffsfs_FindDevice(path,&dummy);
if(dev){
- if(dev->is_mounted){
+ if(!dev->is_mounted)
+ yaffsfs_SetError(-EINVAL);
+ else if(dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else {
yaffs_flush_whole_cache(dev);
yaffs_checkpoint_save(dev);
retVal = 0;
yaffs_flush_whole_cache(dev);
yaffs_checkpoint_save(dev);
retVal = 0;
- } else
- yaffsfs_SetError(-EINVAL);
-
+ }
}else
yaffsfs_SetError(-ENODEV);
}else
yaffsfs_SetError(-ENODEV);
@@
-2704,7
+2723,7
@@
int yaffs_link(const YCHAR *oldpath, const YCHAR *linkpath)
else if(!obj_dir || !lnk_dir || !obj)
yaffsfs_SetError(-ENOENT);
else if(obj->my_dev->read_only)
else if(!obj_dir || !lnk_dir || !obj)
yaffsfs_SetError(-ENOENT);
else if(obj->my_dev->read_only)
- yaffsfs_SetError(-E
INVAL
);
+ yaffsfs_SetError(-E
ROFS
);
else if(lnk)
yaffsfs_SetError(-EEXIST);
else if(lnk_dir->my_dev != obj->my_dev)
else if(lnk)
yaffsfs_SetError(-EEXIST);
else if(lnk_dir->my_dev != obj->my_dev)