+int yaffs_rmdir(const YCHAR *path)
+{
+ int result;
+ YCHAR *alt_path;
+
+ if(yaffsfs_alt_dir_path(path, &alt_path) < 0){
+ yaffsfs_SetError(-ENOMEM);
+ return -1;
+ }
+ if(alt_path)
+ path = alt_path;
+ result = yaffsfs_DoUnlink(path,1);
+ if(alt_path)
+ YFREE(alt_path);
+ return result;
+}
+
+
+void * yaffs_getdev(const YCHAR *path)
+{
+ struct yaffs_dev *dev=NULL;
+ YCHAR *dummy;
+ dev = yaffsfs_FindDevice(path,&dummy);
+ return (void *)dev;
+}
+
+int yaffs_mount2(const YCHAR *path,int read_only)
+{
+ int retVal=-1;
+ int result=YAFFS_FAIL;
+ struct yaffs_dev *dev=NULL;
+
+ T(YAFFS_TRACE_MOUNT,(TSTR("yaffs: Mounting %s" TENDSTR),path));
+
+ yaffsfs_Lock();
+
+ yaffsfs_InitHandles();
+
+ dev = yaffsfs_FindMountPoint(path);
+ if(dev){
+ if(!dev->is_mounted){
+ dev->read_only = read_only ? 1 : 0;
+ result = yaffs_guts_initialise(dev);
+ if(result == YAFFS_FAIL)
+ /* todo error - mount failed */
+ yaffsfs_SetError(-ENOMEM);
+ retVal = result ? 0 : -1;
+
+ }
+ else
+ /* todo error - already mounted. */
+ yaffsfs_SetError(-EBUSY);
+ } else
+ /* todo error - no device */
+ yaffsfs_SetError(-ENODEV);
+
+ yaffsfs_Unlock();
+ return retVal;
+
+}
+
+int yaffs_mount(const YCHAR *path)
+{
+ return yaffs_mount2(path,0);
+}
+
+int yaffs_sync(const YCHAR *path)
+{
+ int retVal=-1;
+ struct yaffs_dev *dev=NULL;
+ YCHAR *dummy;
+
+ yaffsfs_Lock();
+ dev = yaffsfs_FindDevice(path,&dummy);
+ if(dev){
+ if(dev->is_mounted){
+
+ yaffs_flush_whole_cache(dev);
+ yaffs_checkpoint_save(dev);
+ retVal = 0;
+
+ } else
+ /* todo error - not mounted. */
+ yaffsfs_SetError(-EINVAL);
+
+ }else
+ /* todo error - no device */
+ yaffsfs_SetError(-ENODEV);
+
+ yaffsfs_Unlock();
+ return retVal;
+}
+
+
+int yaffs_remount(const YCHAR *path, int force, int read_only)