/* Some forward references */
static yaffs_Object *yaffsfs_FindObject(yaffs_Object *relativeDirectory, const YCHAR *path, int symDepth);
static void yaffsfs_RemoveObjectCallback(yaffs_Object *obj);
/* Some forward references */
static yaffs_Object *yaffsfs_FindObject(yaffs_Object *relativeDirectory, const YCHAR *path, int symDepth);
static void yaffsfs_RemoveObjectCallback(yaffs_Object *obj);
static yaffsfs_Inode yaffsfs_inode[YAFFSFS_N_HANDLES];
static yaffsfs_Handle yaffsfs_handle[YAFFSFS_N_HANDLES];
static yaffsfs_Inode yaffsfs_inode[YAFFSFS_N_HANDLES];
static yaffsfs_Handle yaffsfs_handle[YAFFSFS_N_HANDLES];
memset(yaffsfs_inode,0,sizeof(yaffsfs_inode));
memset(yaffsfs_handle,0,sizeof(yaffsfs_handle));
for(i = 0; i < YAFFSFS_N_HANDLES; i++)
yaffsfs_handle[i].inodeId = -1;
memset(yaffsfs_inode,0,sizeof(yaffsfs_inode));
memset(yaffsfs_handle,0,sizeof(yaffsfs_handle));
for(i = 0; i < YAFFSFS_N_HANDLES; i++)
yaffsfs_handle[i].inodeId = -1;
- while(cfg && cfg->prefix && cfg->dev){
+ ylist_for_each(cfg, &yaffsfs_deviceList){
+ dev = ylist_entry(cfg, yaffs_Device, devList);
- if( matching && (thisMatchLength > longestMatch)){
- /* Matched prefix */
+ // Skip over any /s in p
+ while(yaffsfs_IsPathDivider(*p))
+ p++;
+
+ // p should now be at the end of the string (ie. fully matched)
+ if(*p)
+ matching = 0;
+
+ if( matching && (thisMatchLength > longestMatch))
+ {
+ // Matched prefix
- /* The file already exists */
+ /* The file already exists or it might be a directory */
+
+ /* If it is a directory then we can't open it as a file */
+ if(obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY){
+ openDenied = 1;
+ yaffsfs_SetError(-EISDIR);
+ errorReported = 1;
+ }
#ifdef CONFIG_YAFFS_WINCE
int yaffs_get_wince_times(int fd, unsigned *wctime, unsigned *watime, unsigned *wmtime)
#ifdef CONFIG_YAFFS_WINCE
int yaffs_get_wince_times(int fd, unsigned *wctime, unsigned *watime, unsigned *wmtime)
yaffsfs_Lock();
parent = yaffsfs_FindDirectory(NULL,path,&name,0);
yaffsfs_Lock();
parent = yaffsfs_FindDirectory(NULL,path,&name,0);
- if(parent && parent->myDev->readOnly){
+ if(parent && yaffs_strnlen(name,5) == 0){
+ /* Trying to make the root itself */
+ yaffsfs_SetError(-EEXIST);
+ } else if(parent && parent->myDev->readOnly){
- while(cfg && cfg->prefix && cfg->dev){
- cfg->dev->isMounted = 0;
- cfg->dev->param.removeObjectCallback = yaffsfs_RemoveObjectCallback;
- cfg++;
- }
+void yaffs_RemoveDevice(yaffs_Device *dev)
+{
+ ylist_del_init(&dev->devList);
+}