projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
yaffs Compilation clean ups
[yaffs2.git]
/
yaffs_guts.c
diff --git
a/yaffs_guts.c
b/yaffs_guts.c
index 75eeb84cf3d5d23459d9897fa2b1fbc9e5b9c88c..5db3da643403b6b9a9ad2aa4452ef1089cc73495 100644
(file)
--- a/
yaffs_guts.c
+++ b/
yaffs_guts.c
@@
-66,15
+66,12
@@
static yaffs_Object *yaffs_CreateNewObject(yaffs_Device *dev, int number,
yaffs_ObjectType type);
yaffs_ObjectType type);
-static int yaffs_ApplyXMod(yaffs_
Device *dev
, char *buffer, yaffs_XAttrMod *xmod);
+static int yaffs_ApplyXMod(yaffs_
Object *obj
, char *buffer, yaffs_XAttrMod *xmod);
static void yaffs_RemoveObjectFromDirectory(yaffs_Object *obj);
static int yaffs_CheckStructures(void);
static int yaffs_DoGenericObjectDeletion(yaffs_Object *in);
static void yaffs_RemoveObjectFromDirectory(yaffs_Object *obj);
static int yaffs_CheckStructures(void);
static int yaffs_DoGenericObjectDeletion(yaffs_Object *in);
-static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device *dev, int blockNo);
-
-
static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
int chunkInNAND);
static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
int chunkInNAND);
@@
-3011,7
+3008,7
@@
int yaffs_UpdateObjectHeader(yaffs_Object *in, const YCHAR *name, int force,
int newChunkId;
yaffs_ExtendedTags newTags;
yaffs_ExtendedTags oldTags;
int newChunkId;
yaffs_ExtendedTags newTags;
yaffs_ExtendedTags oldTags;
- YCHAR *alias = NULL;
+
const
YCHAR *alias = NULL;
__u8 *buffer = NULL;
YCHAR oldName[YAFFS_MAX_NAME_LENGTH + 1];
__u8 *buffer = NULL;
YCHAR oldName[YAFFS_MAX_NAME_LENGTH + 1];
@@
-3112,7
+3109,7
@@
int yaffs_UpdateObjectHeader(yaffs_Object *in, const YCHAR *name, int force,
/* process any xattrib modifications */
if(xmod)
/* process any xattrib modifications */
if(xmod)
- yaffs_ApplyXMod(
dev
, (char *)buffer, xmod);
+ yaffs_ApplyXMod(
in
, (char *)buffer, xmod);
/* Tags */
/* Tags */
@@
-4939,10
+4936,11
@@
static int yaffs_DoXMod(yaffs_Object *obj, int set, const YCHAR *name, const voi
return -ENOSPC;
}
return -ENOSPC;
}
-static int yaffs_ApplyXMod(yaffs_
Device *dev
, char *buffer, yaffs_XAttrMod *xmod)
+static int yaffs_ApplyXMod(yaffs_
Object *obj
, char *buffer, yaffs_XAttrMod *xmod)
{
int retval = 0;
int x_offs = sizeof(yaffs_ObjectHeader);
{
int retval = 0;
int x_offs = sizeof(yaffs_ObjectHeader);
+ yaffs_Device *dev = obj->myDev;
int x_size = dev->nDataBytesPerChunk - sizeof(yaffs_ObjectHeader);
char * x_buffer = buffer + x_offs;
int x_size = dev->nDataBytesPerChunk - sizeof(yaffs_ObjectHeader);
char * x_buffer = buffer + x_offs;
@@
-4952,6
+4950,9
@@
static int yaffs_ApplyXMod(yaffs_Device *dev, char *buffer, yaffs_XAttrMod *xmod
else
retval = nval_del(x_buffer, x_size, xmod->name);
else
retval = nval_del(x_buffer, x_size, xmod->name);
+ obj->hasXattr = nval_hasvalues(x_buffer, x_size);
+ obj->xattrKnown = 1;
+
xmod->result = retval;
return retval;
xmod->result = retval;
return retval;
@@
-4966,30
+4967,45
@@
static int yaffs_DoXFetch(yaffs_Object *obj, const YCHAR *name, void *value, int
int x_offs = sizeof(yaffs_ObjectHeader);
int x_size = dev->nDataBytesPerChunk - sizeof(yaffs_ObjectHeader);
int x_offs = sizeof(yaffs_ObjectHeader);
int x_size = dev->nDataBytesPerChunk - sizeof(yaffs_ObjectHeader);
-
__u8
* x_buffer;
+
char
* x_buffer;
int retval = 0;
if(obj->hdrChunk < 1)
return -ENODATA;
int retval = 0;
if(obj->hdrChunk < 1)
return -ENODATA;
- buffer = yaffs_GetTempBuffer(dev, __LINE__);
+ /* If we know that the object has no xattribs then don't do all the
+ * reading and parsing.
+ */
+ if(obj->xattrKnown && !obj->hasXattr){
+ if(name)
+ return -ENODATA;
+ else
+ return 0;
+ }
+
+ buffer = (char *) yaffs_GetTempBuffer(dev, __LINE__);
if(!buffer)
return -ENOMEM;
if(!buffer)
return -ENOMEM;
- result = yaffs_ReadChunkWithTagsFromNAND(dev,obj->hdrChunk, buffer, &tags);
+ result = yaffs_ReadChunkWithTagsFromNAND(dev,obj->hdrChunk,
(__u8 *)
buffer, &tags);
if(result != YAFFS_OK)
retval = -ENOENT;
else{
x_buffer = buffer + x_offs;
if(result != YAFFS_OK)
retval = -ENOENT;
else{
x_buffer = buffer + x_offs;
+ if (!obj->xattrKnown){
+ obj->hasXattr = nval_hasvalues(x_buffer, x_size);
+ obj->xattrKnown = 1;
+ }
+
if(name)
retval = nval_get(x_buffer, x_size, name, value, size);
else
retval = nval_list(x_buffer, x_size, value,size);
}
if(name)
retval = nval_get(x_buffer, x_size, name, value, size);
else
retval = nval_list(x_buffer, x_size, value,size);
}
- yaffs_ReleaseTempBuffer(dev,buffer,__LINE__);
+ yaffs_ReleaseTempBuffer(dev,
(__u8 *)
buffer,__LINE__);
return retval;
}
return retval;
}