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(!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(-EINVAL);
+ yaffsfs_SetError(-EROFS);
errorReported = 1;
} else
obj = yaffs_create_file(dir,name,mode,0,0);
int yaffs_Dofsync(int fd,int datasync)
{
yaffsfs_Handle *h = NULL;
- int retVal = 0;
+ int retVal = -1;
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);
- 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();
/* bad handle */
yaffsfs_SetError(-EBADF);
totalWritten = -1;
- } else if( h && obj && (!h->writing || obj->my_dev->read_only)){
+ } else if(!h->writing){
yaffsfs_SetError(-EINVAL);
totalWritten=-1;
+ } else if(obj->my_dev->read_only){
+ yaffsfs_SetError(-EROFS);
+ totalWritten=-1;
} else {
if(h->append)
startPos = yaffs_get_obj_length(obj);
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)
- yaffsfs_SetError(-EACCES);
+ yaffsfs_SetError(-EROFS);
else if(new_size < 0 || new_size > YAFFS_MAX_FILE_SIZE)
yaffsfs_SetError(-EINVAL);
else
if(!h || !obj)
/* bad handle */
yaffsfs_SetError(-EBADF);
+ else if(!h->writing)
+ yaffsfs_SetError(-EINVAL);
else if(obj->my_dev->read_only)
- yaffsfs_SetError(-EACCES);
+ yaffsfs_SetError(-EROFS);
else if( new_size < 0 || new_size > YAFFS_MAX_FILE_SIZE)
yaffsfs_SetError(-EINVAL);
else
else if(!obj)
yaffsfs_SetError(-ENOENT);
else if(obj->my_dev->read_only)
- yaffsfs_SetError(-EINVAL);
+ yaffsfs_SetError(-EROFS);
else if(!isDirectory && obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY)
yaffsfs_SetError(-EISDIR);
else if(isDirectory && obj->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY)
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;
- } else
- yaffsfs_SetError(-EINVAL);
-
+ }
}else
yaffsfs_SetError(-ENODEV);
else if(!obj_dir || !lnk_dir || !obj)
yaffsfs_SetError(-ENOENT);
else if(obj->my_dev->read_only)
- yaffsfs_SetError(-EINVAL);
+ yaffsfs_SetError(-EROFS);
else if(lnk)
yaffsfs_SetError(-EEXIST);
else if(lnk_dir->my_dev != obj->my_dev)