projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'big-files': Merge in large file support
[yaffs2.git]
/
direct
/
yaffsfs.c
diff --git
a/direct/yaffsfs.c
b/direct/yaffsfs.c
index 014bfc57020478d3b9a647cffae8741068b38616..b57084cb5805ca6b675d9a8287e4a69ece20ef75 100644
(file)
--- a/
direct/yaffsfs.c
+++ b/
direct/yaffsfs.c
@@
-124,7
+124,7
@@
static void yaffsfs_InitHandles(void)
static yaffsfs_Handle *yaffsfs_HandleToPointer(int h)
{
static yaffsfs_Handle *yaffsfs_HandleToPointer(int h)
{
- if(h >= 0 && h <
=
YAFFSFS_N_HANDLES)
+ if(h >= 0 && h < YAFFSFS_N_HANDLES)
return &yaffsfs_handle[h];
return NULL;
}
return &yaffsfs_handle[h];
return NULL;
}
@@
-743,7
+743,15
@@
int yaffs_dup(int handle)
}
}
+static int yaffsfs_TooManyObjects(struct yaffs_dev *dev)
+{
+ int current_objects = dev->n_obj - dev->n_deleted_files;
+ if(dev->param.max_objects && current_objects > dev->param.max_objects)
+ return 1;
+ else
+ return 0;
+}
int yaffs_open_sharing(const YCHAR *path, int oflag, int mode, int sharing)
{
int yaffs_open_sharing(const YCHAR *path, int oflag, int mode, int sharing)
{
@@
-915,6
+923,9
@@
int yaffs_open_sharing(const YCHAR *path, int oflag, int mode, int sharing)
if(dir->my_dev->read_only){
yaffsfs_SetError(-EROFS);
errorReported = 1;
if(dir->my_dev->read_only){
yaffsfs_SetError(-EROFS);
errorReported = 1;
+ } else if(yaffsfs_TooManyObjects(dir->my_dev)) {
+ yaffsfs_SetError(-ENFILE);
+ errorReported = 1;
} else
obj = yaffs_create_file(dir,name,mode,0,0);
} else
obj = yaffs_create_file(dir,name,mode,0,0);
@@
-2366,6
+2377,8
@@
int yaffs_mkdir(const YCHAR *path, mode_t mode)
yaffsfs_SetError(-ELOOP);
else if(!parent)
yaffsfs_SetError(-ENOENT);
yaffsfs_SetError(-ELOOP);
else if(!parent)
yaffsfs_SetError(-ENOENT);
+ else if(yaffsfs_TooManyObjects(parent->my_dev))
+ yaffsfs_SetError(-ENFILE);
else if(strnlen(name,5) == 0){
/* Trying to make the root itself */
yaffsfs_SetError(-EEXIST);
else if(strnlen(name,5) == 0){
/* Trying to make the root itself */
yaffsfs_SetError(-EEXIST);
@@
-2719,6
+2732,14
@@
int yaffs_inodecount(const YCHAR *path)
void yaffs_add_device(struct yaffs_dev *dev)
{
void yaffs_add_device(struct yaffs_dev *dev)
{
+ struct list_head *cfg;
+ /* First check that the device is not in the list. */
+
+ list_for_each(cfg, &yaffsfs_deviceList){
+ if(dev == list_entry(cfg, struct yaffs_dev, dev_list))
+ return;
+ }
+
dev->is_mounted = 0;
dev->param.remove_obj_fn = yaffsfs_RemoveObjectCallback;
dev->is_mounted = 0;
dev->param.remove_obj_fn = yaffsfs_RemoveObjectCallback;
@@
-2976,6
+2997,8
@@
int yaffs_symlink(const YCHAR *oldpath, const YCHAR *newpath)
yaffsfs_SetError(-ELOOP);
else if( !parent || strnlen(name,5) < 1)
yaffsfs_SetError(-ENOENT);
yaffsfs_SetError(-ELOOP);
else if( !parent || strnlen(name,5) < 1)
yaffsfs_SetError(-ENOENT);
+ else if(yaffsfs_TooManyObjects(parent->my_dev))
+ yaffsfs_SetError(-ENFILE);
else if(parent->my_dev->read_only)
yaffsfs_SetError(-EROFS);
else if(parent){
else if(parent->my_dev->read_only)
yaffsfs_SetError(-EROFS);
else if(parent){
@@
-3068,6
+3091,8
@@
int yaffs_link(const YCHAR *oldpath, const YCHAR *linkpath)
yaffsfs_SetError(-ENOENT);
else if(obj->my_dev->read_only)
yaffsfs_SetError(-EROFS);
yaffsfs_SetError(-ENOENT);
else if(obj->my_dev->read_only)
yaffsfs_SetError(-EROFS);
+ else if(yaffsfs_TooManyObjects(obj->my_dev))
+ yaffsfs_SetError(-ENFILE);
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)