X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=direct%2Fyaffsfs.c;h=fc68b969e017c9a82af5b66452f95cfdfae87408;hp=041287c1e77405a01ee575bb13a4906928fcf0a2;hb=f792554ed6d0b514dfb040097033417d8e41f420;hpb=299791ad6d378fae30d50560097a7633cde3aab2 diff --git a/direct/yaffsfs.c b/direct/yaffsfs.c index 041287c..fc68b96 100644 --- a/direct/yaffsfs.c +++ b/direct/yaffsfs.c @@ -30,13 +30,6 @@ #define YAFFSFS_RW_SHIFT (13) #define YAFFSFS_RW_SIZE (1<prefix && cfg->dev){ + ylist_for_each(cfg, &yaffsfs_deviceList){ + dev = ylist_entry(cfg, yaffs_Device, devList); leftOver = path; - p = cfg->prefix; + p = dev->param.name; thisMatchLength = 0; matching = 1; @@ -319,16 +318,23 @@ static yaffs_Device *yaffsfs_FindDevice(const YCHAR *path, YCHAR **restOfPath) /* Skip over any /s in leftOver */ while(yaffsfs_IsPathDivider(*leftOver)) leftOver++; - - 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 *restOfPath = (YCHAR *)leftOver; - retval = cfg->dev; + retval = dev; longestMatch = thisMatchLength; } - cfg++; } return retval; } @@ -1091,7 +1097,7 @@ static int yaffsfs_DoStat(yaffs_Object *obj,struct yaffs_stat *buf) obj = yaffs_GetEquivalentObject(obj); if(obj && buf){ - buf->st_dev = (int)obj->myDev->context; + buf->st_dev = (int)obj->myDev->osContext; buf->st_ino = obj->objectId; buf->st_mode = obj->yst_mode & ~S_IFMT; /* clear out file type bits */ @@ -1180,7 +1186,7 @@ int yaffs_fstat(int fd, struct yaffs_stat *buf) return retVal; } - +#ifndef CONFIG_YAFFS_WINCE /* xattrib functions */ @@ -1434,6 +1440,7 @@ int yaffs_fremovexattr(int fd, const char *name) return retVal; } +#endif #ifdef CONFIG_YAFFS_WINCE int yaffs_get_wince_times(int fd, unsigned *wctime, unsigned *watime, unsigned *wmtime) @@ -1859,26 +1866,23 @@ int yaffs_inodecount(const YCHAR *path) } - -void yaffs_initialise(yaffsfs_DeviceConfiguration *cfgList) +void yaffs_AddDevice(yaffs_Device *dev) { + dev->isMounted = 0; + dev->param.removeObjectCallback = yaffsfs_RemoveObjectCallback; - yaffsfs_DeviceConfiguration *cfg; - - yaffsfs_configurationList = cfgList; - - yaffsfs_InitHandles(); + if(!dev->devList.next) + YINIT_LIST_HEAD(&dev->devList); - cfg = yaffsfs_configurationList; + ylist_add(&dev->devList,&yaffsfs_deviceList); +} - 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); +} -} /* Directory search stuff. */