More checkpoint logging
[yaffs2.git] / direct / yaffsfs.c
index 0638c80b4af0423af184291efa4e43ff68c51e34..9ad08958520cfd8a3bf5b73006d16a4fde9a3899 100644 (file)
@@ -25,7 +25,7 @@
 #endif
 
 
-const char *yaffsfs_c_version="$Id: yaffsfs.c,v 1.9 2006-03-01 08:18:09 charles Exp $";
+const char *yaffsfs_c_version="$Id: yaffsfs.c,v 1.14 2006-11-07 23:37:43 charles Exp $";
 
 // configurationList is the list of devices that are supported
 static yaffsfs_DeviceConfiguration *yaffsfs_configurationList;
@@ -620,7 +620,7 @@ int yaffs_write(int fd, const void *buf, unsigned int nbyte)
 
 }
 
-int yaffs_truncate(int fd, unsigned int newSize)
+int yaffs_truncate(int fd, off_t newSize)
 {
        yaffsfs_Handle *h = NULL;
        yaffs_Object *obj = NULL;
@@ -851,7 +851,7 @@ static int yaffsfs_DoStat(yaffs_Object *obj,struct yaffs_stat *buf)
        buf->st_gid = 0;;     
        buf->st_rdev = obj->yst_rdev;
        buf->st_size = yaffs_GetObjectFileLength(obj);
-               buf->st_blksize = obj->myDev->nBytesPerChunk;
+               buf->st_blksize = obj->myDev->nDataBytesPerChunk;
        buf->st_blocks = (buf->st_size + buf->st_blksize -1)/buf->st_blksize;
        buf->yst_atime = obj->yst_atime; 
        buf->yst_ctime = obj->yst_ctime; 
@@ -1076,6 +1076,10 @@ int yaffs_unmount(const char *path)
                {
                        int i;
                        int inUse;
+                       
+                       yaffs_FlushEntireDeviceCache(dev);
+                       yaffs_CheckpointSave(dev);
+                       
                        for(i = inUse = 0; i < YAFFSFS_N_HANDLES && !inUse; i++)
                        {
                                if(yaffsfs_handle[i].inUse && yaffsfs_handle[i].obj->myDev == dev)
@@ -1114,9 +1118,9 @@ int yaffs_unmount(const char *path)
        
 }
 
-off_t yaffs_freespace(const char *path)
+loff_t yaffs_freespace(const char *path)
 {
-       off_t retVal=-1;
+       loff_t retVal=-1;
        yaffs_Device *dev=NULL;
        char *dummy;
        
@@ -1125,7 +1129,7 @@ off_t yaffs_freespace(const char *path)
        if(dev  && dev->isMounted)
        {
                retVal = yaffs_GetNumberOfFreeChunks(dev);
-               retVal *= dev->nBytesPerChunk;
+               retVal *= dev->nDataBytesPerChunk;
                
        }
        else
@@ -1298,8 +1302,14 @@ struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp)
                yaffsfs_SetError(0);
                if(dsc->nextReturn){
                        dsc->de.d_ino = yaffs_GetEquivalentObject(dsc->nextReturn)->objectId;
+                       dsc->de.d_dont_use = (unsigned)dsc->nextReturn;
                        dsc->de.d_off = dsc->offset++;
-                       yaffs_GetObjectName(dsc->nextReturn,dsc->de.d_name,NAME_MAX+1);
+                       yaffs_GetObjectName(dsc->nextReturn,dsc->de.d_name,NAME_MAX);
+                       if(strlen(dsc->de.d_name) == 0)
+                       {
+                               // this should not happen!
+                               strcpy(dsc->de.d_name,"zz");
+                       }
                        dsc->de.d_reclen = sizeof(struct yaffs_dirent);
                        retVal = &dsc->de;
                        yaffsfs_DirAdvance(dsc);
@@ -1408,7 +1418,7 @@ int yaffs_link(const char *oldpath, const char *newpath)
        // Creates a link called newpath to existing oldpath
        yaffs_Object *obj = NULL;
        yaffs_Object *target = NULL;
-       int retVal;
+       int retVal = 0;
 
                
        yaffsfs_Lock();