}
+void long_name_test(const char *mountpt)
+{
+ int i;
+ yaffs_StartUp();
+ char fullName[1000];
+ char name[300];
+ int result = 0;
+
+ int d,f;
+
+ // Make a 256 byte name
+ memset(name,0,sizeof(name));
+ for(i = 0; i < 256; i++)
+ name[i] = '0' + i % 10;
+
+ sprintf(fullName,"%s/%s",mountpt,name);
+
+ for(i = 0; i < 1; i++)
+ {
+ yaffs_mount(mountpt);
+
+ printf("Files at start\n");
+ dumpDir(mountpt);
+
+ printf("Creating file %s\n",fullName);
+
+ f = yaffs_open(fullName,O_CREAT | O_RDWR,0);
+ yaffs_close(f);
+
+ printf("Result %d\n",f);
+
+ printf("Files\n");
+ dumpDir(mountpt);
+
+ printf("Deleting %s\n",fullName);
+ result = yaffs_unlink(fullName);
+ printf("Result %d\n",result);
+
+ printf("Files\n");
+
+ dumpDir(mountpt);
+
+ yaffs_unmount(mountpt);
+ }
+
+}
+
void lookup_test(const char *mountpt)
//rename_over_test("//////////////////flash///////////////////yaffs1///////////");
- fill_empty_files_test("/yaffs2/");
+ //fill_empty_files_test("/yaffs2/");
+ long_name_test("/yaffs2");
//scan_pattern_test("/flash",10000,10);
//short_scan_test("/flash/flash",40000,200);
*/
const char *yaffs_guts_c_version =
- "$Id: yaffs_guts.c,v 1.87 2009-07-29 04:30:24 charles Exp $";
+ "$Id: yaffs_guts.c,v 1.88 2009-08-11 01:28:42 charles Exp $";
#include "yportenv.h"
}
}
-static int yaffs_DeleteDirectory(yaffs_Object *in)
+static int yaffs_IsNonEmptyDirectory(yaffs_Object *obj)
{
- /* First check that the directory is empty. */
- if (ylist_empty(&in->variant.directoryVariant.children))
- return yaffs_DoGenericObjectDeletion(in);
+ return (obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY) &&
+ !(ylist_empty(&obj->variant.directoryVariant.children));
+}
- return YAFFS_FAIL;
+static int yaffs_DeleteDirectory(yaffs_Object *obj)
+{
+ /* First check that the directory is empty. */
+ if (yaffs_IsNonEmptyDirectory(obj))
+ return YAFFS_FAIL;
+ return yaffs_DoGenericObjectDeletion(obj);
}
static int yaffs_DeleteSymLink(yaffs_Object *in)
default:
return YAFFS_FAIL;
}
- } else
+ } else if(yaffs_IsNonEmptyDirectory(obj))
+ return YAFFS_FAIL;
+ else
return yaffs_ChangeObjectName(obj, obj->myDev->unlinkedDir,
_Y("unlinked"), 0, 0);
}
* Do a real check
*/
yaffs_GetObjectName(l, buffer,
- YAFFS_MAX_NAME_LENGTH);
+ YAFFS_MAX_NAME_LENGTH + 1);
if (yaffs_strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH) == 0)
return l;
}
{
YCHAR name[257];
- yaffs_GetObjectName(obj, name, 256);
+ yaffs_GetObjectName(obj, name, YAFFS_MAX_NAME_LENGTH + 1);
T(YAFFS_TRACE_ALWAYS,
(TSTR