*/
//yaffs_guts.c
-const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.30 2003-09-16 06:48:38 charles Exp $";
+const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.35 2004-09-21 03:03:12 charles Exp $";
#include "yportenv.h"
if(limit)
{
*limit = *limit-1;
- if(limit <= 0)
+ if(*limit <= 0)
{
hitLimit = 1;
}
#else
-#if defined(CONFIG_KERNEL_2_5)
+//#if defined(CONFIG_KERNEL_2_5)
+#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
theObject->st_atime = theObject->st_mtime = theObject->st_ctime = CURRENT_TIME.tv_sec;
#else
theObject->st_atime = theObject->st_mtime = theObject->st_ctime = CURRENT_TIME;
#ifdef CONFIG_YAFFS_WINCE
yfsd_WinFileTimeNow(in->win_atime);
in->win_ctime[0] = in->win_mtime[0] = in->win_atime[0];
- in->win_ctime[1] = in->win_mtime[1] = in->win_atime[0];
+ in->win_ctime[1] = in->win_mtime[1] = in->win_atime[1];
#else
-#if defined(CONFIG_KERNEL_2_5)
+//#if defined(CONFIG_KERNEL_2_5)
+#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
in->st_atime = in->st_mtime = in->st_ctime = CURRENT_TIME.tv_sec;
#else
in->st_atime = in->st_mtime = in->st_ctime = CURRENT_TIME;
{
// It's a header
object->chunkId = newChunk;
+ object->serial = tags.serialNumber;
}
else
{
}
else
{
+ memset(buffer,0,YAFFS_BYTES_PER_CHUNK);
return 0;
}
int lastChunk = 1+ newSize/YAFFS_BYTES_PER_CHUNK;
// Got to read and rewrite the last chunk with its new size.
+ // NB Got to zero pad to nuke old data
yaffs_ReadChunkDataFromObject(in,lastChunk,dev->localBuffer);
-
+ memset(dev->localBuffer + sizeOfPartialChunk,0, YAFFS_BYTES_PER_CHUNK - sizeOfPartialChunk);
+
yaffs_WriteChunkDataToObject(in,lastChunk,dev->localBuffer,sizeOfPartialChunk,1);
}
#ifdef CONFIG_YAFFS_WINCE
yfsd_WinFileTimeNow(in->win_mtime);
#else
-#if defined(CONFIG_KERNEL_2_5)
+//#if defined(CONFIG_KERNEL_2_5)
+#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
in->st_mtime = CURRENT_TIME.tv_sec;
#else
in->st_mtime = CURRENT_TIME;
{
// Hoosterman, another problem....
// We're trying to use a non-directory as a directory
- // Todo ... handle
- T(YAFFS_TRACE_ERROR, (TSTR("yaffs tragedy: attempting to use non-directory as a directory in scan" TENDSTR)));
+
+ T(YAFFS_TRACE_ERROR, (TSTR("yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found." TENDSTR)));
+ parent = dev->lostNFoundDir;
}
if(valid & ATTR_UID) obj->st_uid = attr->ia_uid;
if(valid & ATTR_GID) obj->st_gid = attr->ia_gid;
-#if defined(CONFIG_KERNEL_2_5)
+//#if defined(CONFIG_KERNEL_2_5)
+#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+
if(valid & ATTR_ATIME) obj->st_atime = attr->ia_atime.tv_sec;
if(valid & ATTR_CTIME) obj->st_ctime = attr->ia_ctime.tv_sec;
if(valid & ATTR_MTIME) obj->st_mtime = attr->ia_mtime.tv_sec;
attr->ia_uid = obj->st_uid; valid |= ATTR_UID;
attr->ia_gid = obj->st_gid; valid |= ATTR_GID;
-#if defined(CONFIG_KERNEL_2_5)
+//#if defined(CONFIG_KERNEL_2_5)
+#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
attr->ia_atime.tv_sec = obj->st_atime; valid |= ATTR_ATIME;
attr->ia_ctime.tv_sec = obj->st_ctime; valid |= ATTR_CTIME;
attr->ia_mtime.tv_sec = obj->st_mtime; valid |= ATTR_MTIME;
yaffs_DeinitialiseBlocks(dev);
yaffs_DeinitialiseTnodes(dev);
yaffs_DeinitialiseObjects(dev);
+ if(dev->nShortOpCaches > 0)
+ YFREE(dev->srCache);
YFREE(dev->localBuffer);
}
+