140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project/*
240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project* Test code for the "direct" interface.
340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project*/
440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include <stdio.h>
740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include <string.h>
840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include <unistd.h>
940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include <fcntl.h>
1040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
1140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#include "yaffsfs.h"
1240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
1340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid dumpDir(const char *dname);
1440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
1540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectchar xx[600];
1640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
1740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid copy_in_a_file(char *yaffsName,char *inName)
1840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
1940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int inh,outh;
2040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	unsigned char buffer[100];
2140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int ni,no;
2240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	inh = open(inName,O_RDONLY);
2340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	outh = yaffs_open(yaffsName, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
2440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
2540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	while((ni = read(inh,buffer,100)) > 0)
2640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
2740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		no = yaffs_write(outh,buffer,ni);
2840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if(ni != no)
2940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
3040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("problem writing yaffs file\n");
3140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
3240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
3340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
3440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
3540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(outh);
3640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	close(inh);
3740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
3840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
3940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid make_a_file(char *yaffsName,char bval,int sizeOfFile)
4040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
4140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int outh;
4240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
4340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	unsigned char buffer[100];
4440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
4540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	outh = yaffs_open(yaffsName, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
4640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
4740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	memset(buffer,bval,100);
4840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
4940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	do{
5040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		i = sizeOfFile;
5140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if(i > 100) i = 100;
5240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sizeOfFile -= i;
5340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
5440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(outh,buffer,i);
5540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
5640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	} while (sizeOfFile > 0);
5740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
5840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
5940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(outh);
6040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
6140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
6240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
6340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid make_pattern_file(char *fn,int size)
6440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
6540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int outh;
6640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int marker;
6740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
6840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	outh = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
6940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_lseek(outh,size-1,SEEK_SET);
7040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_write(outh,"A",1);
7140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
7240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < size; i+=256)
7340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
7440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		marker = ~i;
7540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_lseek(outh,i,SEEK_SET);
7640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(outh,&marker,sizeof(marker));
7740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
7840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(outh);
7940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
8040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
8140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
8240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint check_pattern_file(char *fn)
8340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
8440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
8540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int marker;
8640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
8740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int size;
8840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int ok = 1;
8940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
9040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open(fn, O_RDWR,0);
9140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	size = yaffs_lseek(h,0,SEEK_END);
9240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
9340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < size; i+=256)
9440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
9540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_lseek(h,i,SEEK_SET);
9640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_read(h,&marker,sizeof(marker));
9740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		ok = (marker == ~i);
9840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if(!ok)
9940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
10040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		   printf("pattern check failed on file %s, size %d at position %d. Got %x instead of %x\n",
10140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					fn,size,i,marker,~i);
10240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
10340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
10440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(h);
10540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	return ok;
10640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
10740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
10840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
10940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
11040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
11140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
11240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint dump_file_data(char *fn)
11340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
11440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
11540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int marker;
11640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i = 0;
11740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int size;
11840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int ok = 1;
11940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	unsigned char b;
12040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
12140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open(fn, O_RDWR,0);
12240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
12340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
12440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("%s\n",fn);
12540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	while(yaffs_read(h,&b,1)> 0)
12640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
12740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("%02x",b);
12840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		i++;
12940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if(i > 32)
13040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
13140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		   printf("\n");
13240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		   i = 0;;
13340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		 }
13440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
13540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\n");
13640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(h);
13740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	return ok;
13840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
13940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
14040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
14140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
14240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid dump_file(const char *fn)
14340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
14440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
14540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int size;
14640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
14740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
14840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open(fn,O_RDONLY,0);
14940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(h < 0)
15040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
15140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("*****\nDump file %s does not exist\n",fn);
15240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
15340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	else
15440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
15540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		size = yaffs_lseek(h,0,SEEK_SET);
15640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("*****\nDump file %s size %d\n",fn,size);
15740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(i = 0; i < size; i++)
15840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
15940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
16040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
16140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
16240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
16340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
16440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid create_file_of_size(const char *fn,int syze)
16540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
16640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
16740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int n;
16840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
16940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char xx[200];
17040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
17140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int iterations = (syze + strlen(fn) -1)/ strlen(fn);
17240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
17340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
17440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
17540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	while (iterations > 0)
17640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
17740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(xx,"%s %8d",fn,iterations);
17840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(h,xx,strlen(xx));
17940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		iterations--;
18040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
18140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close (h);
18240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
18340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
18440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid verify_file_of_size(const char *fn,int syze)
18540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
18640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
18740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int n;
18840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
18940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char xx[200];
19040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char yy[200];
19140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int l;
19240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
19340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int iterations = (syze + strlen(fn) -1)/ strlen(fn);
19440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
19540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open(fn, O_RDONLY, S_IREAD | S_IWRITE);
19640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
19740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	while (iterations > 0)
19840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
19940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(xx,"%s %8d",fn,iterations);
20040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		l = strlen(xx);
20140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
20240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_read(h,yy,l);
20340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yy[l] = 0;
20440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
20540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if(strcmp(xx,yy)){
20640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("=====>>>>> verification of file %s failed near position %d\n",fn,yaffs_lseek(h,0,SEEK_CUR));
20740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
20840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		iterations--;
20940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
21040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close (h);
21140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
21240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
21340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid create_resized_file_of_size(const char *fn,int syze1,int reSyze, int syze2)
21440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
21540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
21640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int n;
21740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
21840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
21940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int iterations;
22040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
22140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
22240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
22340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	iterations = (syze1 + strlen(fn) -1)/ strlen(fn);
22440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	while (iterations > 0)
22540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
22640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(h,fn,strlen(fn));
22740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		iterations--;
22840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
22940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
23040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_truncate(h,reSyze);
23140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
23240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_lseek(h,0,SEEK_SET);
23340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	iterations = (syze2 + strlen(fn) -1)/ strlen(fn);
23440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	while (iterations > 0)
23540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
23640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(h,fn,strlen(fn));
23740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		iterations--;
23840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
23940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
24040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close (h);
24140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
24240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
24340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
24440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid do_some_file_stuff(const char *path)
24540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
24640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
24740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char fn[100];
24840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
24940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(fn,"%s/%s",path,"f1");
25040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	create_file_of_size(fn,10000);
25140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
25240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(fn,"%s/%s",path,"fdel");
25340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	create_file_of_size(fn,10000);
25440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(fn);
25540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
25640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(fn,"%s/%s",path,"f2");
25740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
25840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	create_resized_file_of_size(fn,10000,3000,4000);
25940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
26040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
26140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid yaffs_backward_scan_test(const char *path)
26240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
26340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char fn[100];
26440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
26540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
26640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
26740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(path);
26840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
26940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	do_some_file_stuff(path);
27040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
27140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(fn,"%s/ddd",path);
27240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
27340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mkdir(fn,0);
27440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
27540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	do_some_file_stuff(fn);
27640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
27740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unmount(path);
27840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
27940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(path);
28040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
28140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
28240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectchar xxzz[2000];
28340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
28440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
28540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid yaffs_device_flush_test(const char *path)
28640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
28740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char fn[100];
28840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
28940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
29040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
29140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
29240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
29340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(path);
29440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
29540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	do_some_file_stuff(path);
29640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
29740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Open and add some data to a few files
29840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < 10; i++) {
29940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
30040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(fn,"%s/ff%d",path,i);
30140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
30240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		h = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IWRITE | S_IREAD);
30340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(h,xxzz,2000);
30440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(h,xxzz,2000);
30540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
30640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unmount(path);
30740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
30840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(path);
30940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
31040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
31140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
31240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
31340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid short_scan_test(const char *path, int fsize, int niterations)
31440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
31540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
31640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char fn[100];
31740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
31840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(fn,"%s/%s",path,"f1");
31940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
32040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
32140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < niterations; i++)
32240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
32340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("\n*****************\nIteration %d\n",i);
32440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mount(path);
32540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("\nmount: Directory look-up of %s\n",path);
32640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		dumpDir(path);
32740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		make_a_file(fn,1,fsize);
32840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_unmount(path);
32940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
33040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
33140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
33240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
33340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
33440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid scan_pattern_test(const char *path, int fsize, int niterations)
33540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
33640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
33740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int j;
33840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char fn[3][100];
33940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int result;
34040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
34140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(fn[0],"%s/%s",path,"f0");
34240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(fn[1],"%s/%s",path,"f1");
34340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(fn[2],"%s/%s",path,"f2");
34440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
34540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
34640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
34740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < niterations; i++)
34840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
34940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("\n*****************\nIteration %d\n",i);
35040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mount(path);
35140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("\nmount: Directory look-up of %s\n",path);
35240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		dumpDir(path);
35340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(j = 0; j < 3; j++)
35440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
35540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			result = dump_file_data(fn[j]);
35640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			result = check_pattern_file(fn[j]);
35740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			make_pattern_file(fn[j],fsize);
35840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			result = dump_file_data(fn[j]);
35940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			result = check_pattern_file(fn[j]);
36040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
36140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_unmount(path);
36240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
36340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
36440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
36540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid fill_disk(char *path,int nfiles)
36640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
36740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
36840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int n;
36940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int result;
37040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f;
37140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
37240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char str[50];
37340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
37440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(n = 0; n < nfiles; n++)
37540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
37640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(str,"%s/%d",path,n);
37740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
37840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		h = yaffs_open(str, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
37940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
38040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("writing file %s handle %d ",str, h);
38140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
38240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		while ((result = yaffs_write(h,xx,600)) == 600)
38340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
38440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			f = yaffs_freespace(path);
38540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
38640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		result = yaffs_close(h);
38740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf(" close %d\n",result);
38840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
38940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
39040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
39140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid fill_disk_and_delete(char *path, int nfiles, int ncycles)
39240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
39340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i,j;
39440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char str[50];
39540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int result;
39640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
39740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < ncycles; i++)
39840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
39940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("@@@@@@@@@@@@@@ cycle %d\n",i);
40040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		fill_disk(path,nfiles);
40140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
40240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(j = 0; j < nfiles; j++)
40340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
40440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			sprintf(str,"%s/%d",path,j);
40540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			result = yaffs_unlink(str);
40640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("unlinking file %s, result %d\n",str,result);
40740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
40840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
40940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
41040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
41140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
41240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid fill_files(char *path,int flags, int maxIterations,int siz)
41340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
41440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
41540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int j;
41640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char str[50];
41740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
41840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
41940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	i = 0;
42040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
42140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	do{
42240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(str,"%s/%d",path,i);
42340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		h = yaffs_open(str, O_CREAT | O_TRUNC | O_RDWR,S_IREAD | S_IWRITE);
42440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_close(h);
42540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
42640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if(h >= 0)
42740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
42840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			for(j = 0; j < siz; j++)
42940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			{
43040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				yaffs_write(h,str,1);
43140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			}
43240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
43340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
43440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if( flags & 1)
43540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
43640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_unlink(str);
43740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
43840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		i++;
43940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	} while(h >= 0 && i < maxIterations);
44040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
44140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(flags & 2)
44240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
44340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		i = 0;
44440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		do{
44540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			sprintf(str,"%s/%d",path,i);
44640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("unlink %s\n",str);
44740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			i++;
44840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		} while(yaffs_unlink(str) >= 0);
44940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
45040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
45140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
45240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid leave_unlinked_file(char *path,int maxIterations,int siz)
45340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
45440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
45540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char str[50];
45640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
45740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
45840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	i = 0;
45940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
46040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	do{
46140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(str,"%s/%d",path,i);
46240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("create %s\n",str);
46340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		h = yaffs_open(str, O_CREAT | O_TRUNC | O_RDWR,S_IREAD | S_IWRITE);
46440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if(h >= 0)
46540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
46640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_unlink(str);
46740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
46840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		i++;
46940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	} while(h < 0 && i < maxIterations);
47040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
47140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(h >= 0)
47240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
47340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(i = 0; i < siz; i++)
47440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
47540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_write(h,str,1);
47640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
47740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
47840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
47940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Leaving file %s open\n",str);
48040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
48140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
48240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
48340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid dumpDirFollow(const char *dname)
48440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
48540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_DIR *d;
48640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_dirent *de;
48740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	struct yaffs_stat s;
48840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char str[100];
48940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
49040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	d = yaffs_opendir(dname);
49140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
49240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(!d)
49340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
49440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("opendir failed\n");
49540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
49640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	else
49740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
49840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		while((de = yaffs_readdir(d)) != NULL)
49940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
50040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			sprintf(str,"%s/%s",dname,de->d_name);
50140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
50240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_stat(str,&s);
50340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
50440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("%s length %d mode %X ",de->d_name,(int)s.st_size,s.st_mode);
50540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			switch(s.st_mode & S_IFMT)
50640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			{
50740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				case S_IFREG: printf("data file"); break;
50840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				case S_IFDIR: printf("directory"); break;
50940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				case S_IFLNK: printf("symlink -->");
51040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project							  if(yaffs_readlink(str,str,100) < 0)
51140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project								printf("no alias");
51240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project							  else
51340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project								printf("\"%s\"",str);
51440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project							  break;
51540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				default: printf("unknown"); break;
51640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			}
51740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
51840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("\n");
51940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
52040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
52140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_closedir(d);
52240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
52340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\n");
52440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
52540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Free space in %s is %d\n\n",dname,(int)yaffs_freespace(dname));
52640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
52740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
52840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
52940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
53040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid dump_directory_tree_worker(const char *dname,int recursive)
53140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
53240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_DIR *d;
53340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_dirent *de;
53440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	struct yaffs_stat s;
53540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char str[100];
53640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
53740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	d = yaffs_opendir(dname);
53840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
53940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(!d)
54040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
54140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("opendir failed\n");
54240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
54340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	else
54440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
54540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		while((de = yaffs_readdir(d)) != NULL)
54640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
54740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			sprintf(str,"%s/%s",dname,de->d_name);
54840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
54940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_lstat(str,&s);
55040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
55140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("%s length %d mode %X ",str,(int)s.st_size,s.st_mode);
55240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			switch(s.st_mode & S_IFMT)
55340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			{
55440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				case S_IFREG: printf("data file"); break;
55540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				case S_IFDIR: printf("directory"); break;
55640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				case S_IFLNK: printf("symlink -->");
55740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project							  if(yaffs_readlink(str,str,100) < 0)
55840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project								printf("no alias");
55940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project							  else
56040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project								printf("\"%s\"",str);
56140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project							  break;
56240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				default: printf("unknown"); break;
56340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			}
56440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
56540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("\n");
56640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
56740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			if((s.st_mode & S_IFMT) == S_IFDIR && recursive)
56840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				dump_directory_tree_worker(str,1);
56940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
57040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
57140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
57240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_closedir(d);
57340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
57440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
57540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
57640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
57740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic void dump_directory_tree(const char *dname)
57840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
57940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dump_directory_tree_worker(dname,1);
58040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\n");
58140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Free space in %s is %d\n\n",dname,(int)yaffs_freespace(dname));
58240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
58340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
58440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid dumpDir(const char *dname)
58540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{	dump_directory_tree_worker(dname,0);
58640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\n");
58740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Free space in %s is %d\n\n",dname,(int)yaffs_freespace(dname));
58840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
58940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
59040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
59140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectstatic void PermissionsCheck(const char *path, mode_t tmode, int tflags,int expectedResult)
59240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
59340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int fd;
59440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
59540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(yaffs_chmod(path,tmode)< 0) printf("chmod failed\n");
59640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
59740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	fd = yaffs_open(path,tflags,0);
59840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
59940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if((fd >= 0) != (expectedResult > 0))
60040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
60140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("Permissions check %x %x %d failed\n",tmode,tflags,expectedResult);
60240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
60340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	else
60440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
60540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("Permissions check %x %x %d OK\n",tmode,tflags,expectedResult);
60640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
60740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
60840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
60940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(fd);
61040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
61140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
61240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
61340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
61440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint long_test(int argc, char *argv[])
61540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
61640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
61740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f;
61840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int r;
61940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char buffer[20];
62040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
62140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char str[100];
62240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
62340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
62440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	mode_t temp_mode;
62540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	struct yaffs_stat ystat;
62640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
62740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
62840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
62940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount("/boot");
63040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount("/data");
63140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount("/flash");
63240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount("/ram");
63340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
63440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
63540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
63640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /data\n");
63740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/data");
63840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /flash\n");
63940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/flash");
64040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
64140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//leave_unlinked_file("/flash",20000,0);
64240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//leave_unlinked_file("/data",20000,0);
64340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
64440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	leave_unlinked_file("/ram",20,0);
64540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
64640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
64740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	f = yaffs_open("/boot/b1", O_RDONLY,0);
64840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
64940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("open /boot/b1 readonly, f=%d\n",f);
65040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
65140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	f = yaffs_open("/boot/b1", O_CREAT,S_IREAD | S_IWRITE);
65240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
65340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("open /boot/b1 O_CREAT, f=%d\n",f);
65440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
65540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
65640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_write(f,"hello",1);
65740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("write %d attempted to write to a read-only file\n",r);
65840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
65940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_close(f);
66040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
66140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("close %d\n",r);
66240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
66340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	f = yaffs_open("/boot/b1", O_RDWR,0);
66440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
66540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("open /boot/b1 O_RDWR,f=%d\n",f);
66640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
66740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
66840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_write(f,"hello",2);
66940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("write %d attempted to write to a writeable file\n",r);
67040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_write(f,"world",3);
67140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("write %d attempted to write to a writeable file\n",r);
67240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
67340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r= yaffs_lseek(f,0,SEEK_END);
67440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("seek end %d\n",r);
67540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	memset(buffer,0,20);
67640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_read(f,buffer,10);
67740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("read %d \"%s\"\n",r,buffer);
67840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r= yaffs_lseek(f,0,SEEK_SET);
67940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("seek set %d\n",r);
68040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	memset(buffer,0,20);
68140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_read(f,buffer,10);
68240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("read %d \"%s\"\n",r,buffer);
68340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	memset(buffer,0,20);
68440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_read(f,buffer,10);
68540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("read %d \"%s\"\n",r,buffer);
68640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
68740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Check values reading at end.
68840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// A read past end of file should return 0 for 0 bytes read.
68940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
69040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r= yaffs_lseek(f,0,SEEK_END);
69140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_read(f,buffer,10);
69240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("read at end returned  %d\n",r);
69340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r= yaffs_lseek(f,500,SEEK_END);
69440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_read(f,buffer,10);
69540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("read past end returned  %d\n",r);
69640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
69740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_close(f);
69840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
69940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("close %d\n",r);
70040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
70140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	copy_in_a_file("/boot/yyfile","xxx");
70240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
70340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Create a file with a long name
70440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
70540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	copy_in_a_file("/boot/file with a long name","xxx");
70640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
70740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
70840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
70940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
71040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
71140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Check stat
71240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_stat("/boot/file with a long name",&ystat);
71340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
71440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Check rename
71540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
71640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_rename("/boot/file with a long name","/boot/r1");
71740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
71840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
71940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
72040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
72140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Check unlink
72240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_unlink("/boot/r1");
72340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
72440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
72540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
72640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
72740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Check mkdir
72840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
72940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_mkdir("/boot/directory1",0);
73040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
73140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
73240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
73340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot/directory1\n");
73440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot/directory1");
73540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
73640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// add a file to the directory
73740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	copy_in_a_file("/boot/directory1/file with a long name","xxx");
73840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
73940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
74040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
74140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot/directory1\n");
74240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot/directory1");
74340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
74440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//  Attempt to delete directory (should fail)
74540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
74640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_rmdir("/boot/directory1");
74740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
74840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
74940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
75040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot/directory1\n");
75140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot/directory1");
75240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
75340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Delete file first, then rmdir should work
75440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_unlink("/boot/directory1/file with a long name");
75540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_rmdir("/boot/directory1");
75640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
75740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
75840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
75940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
76040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot/directory1\n");
76140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot/directory1");
76240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
76340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#if 0
76440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	fill_disk_and_delete("/boot",20,20);
76540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
76640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
76740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
76840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#endif
76940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
77040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_symlink("yyfile","/boot/slink");
77140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
77240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_readlink("/boot/slink",str,100);
77340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("symlink alias is %s\n",str);
77440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
77540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
77640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
77740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
77840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
77940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
78040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot (using stat instead of lstat)\n");
78140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDirFollow("/boot");
78240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot/directory1\n");
78340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot/directory1");
78440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
78540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open("/boot/slink",O_RDWR,0);
78640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
78740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("file length is %d\n",(int)yaffs_lseek(h,0,SEEK_END));
78840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
78940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(h);
79040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
79140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink("/boot/slink");
79240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
79340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
79440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
79540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
79640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
79740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Check chmod
79840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
79940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_stat("/boot/yyfile",&ystat);
80040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	temp_mode = ystat.st_mode;
80140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
80240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_chmod("/boot/yyfile",0x55555);
80340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
80440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
80540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
80640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_chmod("/boot/yyfile",temp_mode);
80740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /boot\n");
80840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/boot");
80940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
81040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Permission checks...
81140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",0, O_WRONLY,0);
81240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",0, O_RDONLY,0);
81340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",0, O_RDWR,0);
81440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
81540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",S_IREAD, O_WRONLY,0);
81640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",S_IREAD, O_RDONLY,1);
81740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",S_IREAD, O_RDWR,0);
81840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
81940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",S_IWRITE, O_WRONLY,1);
82040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",S_IWRITE, O_RDONLY,0);
82140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",S_IWRITE, O_RDWR,0);
82240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
82340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",S_IREAD | S_IWRITE, O_WRONLY,1);
82440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",S_IREAD | S_IWRITE, O_RDONLY,1);
82540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	PermissionsCheck("/boot/yyfile",S_IREAD | S_IWRITE, O_RDWR,1);
82640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
82740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_chmod("/boot/yyfile",temp_mode);
82840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
82940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//create a zero-length file and unlink it (test for scan bug)
83040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
83140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open("/boot/zlf",O_CREAT | O_TRUNC | O_RDWR,0);
83240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(h);
83340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
83440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink("/boot/zlf");
83540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
83640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
83740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_DumpDevStruct("/boot");
83840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
83940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	fill_disk_and_delete("/boot",20,20);
84040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
84140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_DumpDevStruct("/boot");
84240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
84340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	fill_files("/boot",1,10000,0);
84440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	fill_files("/boot",1,10000,5000);
84540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	fill_files("/boot",2,10000,0);
84640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	fill_files("/boot",2,10000,5000);
84740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
84840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	leave_unlinked_file("/data",20000,0);
84940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	leave_unlinked_file("/data",20000,5000);
85040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	leave_unlinked_file("/data",20000,5000);
85140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	leave_unlinked_file("/data",20000,5000);
85240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	leave_unlinked_file("/data",20000,5000);
85340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	leave_unlinked_file("/data",20000,5000);
85440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
85540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_DumpDevStruct("/boot");
85640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_DumpDevStruct("/data");
85740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
85840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
85940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
86040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	return 0;
86140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
86240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
86340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
86440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint huge_directory_test_on_path(char *path)
86540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
86640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
86740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_DIR *d;
86840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_dirent *de;
86940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	struct yaffs_stat s;
87040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
87140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f;
87240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
87340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int r;
87440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int total = 0;
87540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int lastTotal = 0;
87640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char buffer[20];
87740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
87840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char str[100];
87940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char name[100];
88040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char name2[100];
88140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
88240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
88340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	mode_t temp_mode;
88440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	struct yaffs_stat ystat;
88540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
88640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
88740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
88840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(path);
88940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
89040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Create a large number of files
89140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
89240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < 2000; i++)
89340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
89440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	  sprintf(str,"%s/%d",path,i);
89540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
89640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   f = yaffs_open(str,O_CREAT,S_IREAD | S_IWRITE);
89740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   yaffs_close(f);
89840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
89940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
90040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
90140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
90240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	d = yaffs_opendir(path);
90340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	i = 0;
90440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if (d) {
90540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	while((de = yaffs_readdir(d)) != NULL) {
90640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if (total >lastTotal+100*9*1024||(i & 1023)==0){
90740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("files = %d, total = %d\n",i, total);
90840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	lastTotal = total;
90940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
91040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		i++;
91140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(str,"%s/%s",path,de->d_name);
91240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_lstat(str,&s);
91340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		switch(s.st_mode & S_IFMT){
91440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		case S_IFREG:
91540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//printf("data file");
91640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	total += s.st_size;
91740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	break;
91840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
91940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
92040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
92140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_closedir(d);
92240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
92340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
92440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	return 0;
92540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
92640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
92740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint yaffs_scan_test(const char *path)
92840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
92940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
93040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
93140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
93240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid rename_over_test(const char *mountpt)
93340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
93440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
93540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[100];
93640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char b[100];
93740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
93840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"%s/a",mountpt);
93940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(b,"%s/b",mountpt);
94040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
94140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
94240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
94340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
94440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	i = yaffs_open(a,O_CREAT | O_TRUNC | O_RDWR, 0);
94540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(i);
94640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	i = yaffs_open(b,O_CREAT | O_TRUNC | O_RDWR, 0);
94740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(i);
94840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_rename(a,b); // rename over
94940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_rename(b,a); // rename back again (not renaimng over)
95040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_rename(a,b); // rename back again (not renaimng over)
95140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
95240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
95340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unmount(mountpt);
95440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
95540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
95640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
95740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint resize_stress_test(const char *path)
95840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
95940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int a,b,i,j;
96040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int x;
96140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int r;
96240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char aname[100];
96340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char bname[100];
96440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
96540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char abuffer[1000];
96640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char bbuffer[1000];
96740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
96840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_StartUp();
96940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
97040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_mount(path);
97140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
97240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   sprintf(aname,"%s%s",path,"/a");
97340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   sprintf(bname,"%s%s",path,"/b");
97440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
97540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   memset(abuffer,'a',1000);
97640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   memset(bbuffer,'b',1000);
97740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
97840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   a = yaffs_open(aname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
97940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   b = yaffs_open(bname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
98040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
98140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   printf(" %s %d %s %d\n",aname,a,bname,b);
98240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
98340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   x = 0;
98440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
98540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   for(j = 0; j < 100; j++)
98640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   {
98740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_lseek(a,0,SEEK_END);
98840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
98940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
99040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(i = 0; i <20000; i++)
99140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
99240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		   //r =        yaffs_lseek(b,i,SEEK_SET);
99340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			//r = yaffs_write(b,bbuffer,1000);
99440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
99540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			if(x & 0x16)
99640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			{
99740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				// shrink
99840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				int syz = yaffs_lseek(a,0,SEEK_END);
99940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
100040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				syz -= 500;
100140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				if(syz < 0) syz = 0;
100240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				yaffs_truncate(a,syz);
100340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
100440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			}
100540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			else
100640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			{
100740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				//expand
100840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				r = yaffs_lseek(a,i * 500,SEEK_SET);
100940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				r = yaffs_write(a,abuffer,1000);
101040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			}
101140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			x++;
101240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
101340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
101440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   }
101540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
101640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   return 0;
101740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
101840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
101940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
102040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
102140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint resize_stress_test_no_grow_complex(const char *path,int iters)
102240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
102340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int a,b,i,j;
102440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int x;
102540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int r;
102640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char aname[100];
102740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char bname[100];
102840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
102940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char abuffer[1000];
103040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char bbuffer[1000];
103140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
103240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_StartUp();
103340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
103440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_mount(path);
103540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
103640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   sprintf(aname,"%s%s",path,"/a");
103740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   sprintf(bname,"%s%s",path,"/b");
103840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
103940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   memset(abuffer,'a',1000);
104040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   memset(bbuffer,'b',1000);
104140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
104240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   a = yaffs_open(aname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
104340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   b = yaffs_open(bname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
104440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
104540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   printf(" %s %d %s %d\n",aname,a,bname,b);
104640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
104740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   x = 0;
104840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
104940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   for(j = 0; j < iters; j++)
105040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   {
105140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_lseek(a,0,SEEK_END);
105240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
105340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
105440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(i = 0; i <20000; i++)
105540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
105640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		   //r =        yaffs_lseek(b,i,SEEK_SET);
105740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			//r = yaffs_write(b,bbuffer,1000);
105840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
105940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			if(!(x%20))
106040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			{
106140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				// shrink
106240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				int syz = yaffs_lseek(a,0,SEEK_END);
106340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
106440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				while(syz > 4000)
106540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				{
106640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
106740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					syz -= 2050;
106840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					if(syz < 0) syz = 0;
106940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					yaffs_truncate(a,syz);
107040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					syz = yaffs_lseek(a,0,SEEK_END);
107140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					printf("shrink to %d\n",syz);
107240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				}
107340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
107440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
107540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			}
107640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			else
107740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			{
107840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				//expand
107940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				r = yaffs_lseek(a,500,SEEK_END);
108040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				r = yaffs_write(a,abuffer,1000);
108140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			}
108240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			x++;
108340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
108440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
108540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
108640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("file size is %d\n",yaffs_lseek(a,0,SEEK_END));
108740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
108840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   }
108940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
109040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   return 0;
109140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
109240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
109340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
109440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint resize_stress_test_no_grow(const char *path,int iters)
109540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
109640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int a,b,i,j;
109740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int x;
109840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int r;
109940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char aname[100];
110040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char bname[100];
110140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
110240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char abuffer[1000];
110340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char bbuffer[1000];
110440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
110540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_StartUp();
110640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
110740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_mount(path);
110840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
110940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   sprintf(aname,"%s%s",path,"/a");
111040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   sprintf(bname,"%s%s",path,"/b");
111140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
111240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   memset(abuffer,'a',1000);
111340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   memset(bbuffer,'b',1000);
111440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
111540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   a = yaffs_open(aname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
111640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   b = yaffs_open(bname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
111740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
111840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   printf(" %s %d %s %d\n",aname,a,bname,b);
111940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
112040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   x = 0;
112140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
112240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   for(j = 0; j < iters; j++)
112340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   {
112440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_lseek(a,0,SEEK_END);
112540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
112640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
112740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(i = 0; i <20000; i++)
112840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
112940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		   //r =        yaffs_lseek(b,i,SEEK_SET);
113040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			//r = yaffs_write(b,bbuffer,1000);
113140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
113240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			if(!(x%20))
113340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			{
113440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				// shrink
113540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				int syz = yaffs_lseek(a,0,SEEK_END);
113640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
113740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				while(syz > 4000)
113840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				{
113940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
114040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					syz -= 2050;
114140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					if(syz < 0) syz = 0;
114240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					yaffs_truncate(a,syz);
114340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					syz = yaffs_lseek(a,0,SEEK_END);
114440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project					printf("shrink to %d\n",syz);
114540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				}
114640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
114740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
114840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			}
114940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			else
115040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			{
115140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				//expand
115240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				r = yaffs_lseek(a,-500,SEEK_END);
115340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				r = yaffs_write(a,abuffer,1000);
115440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			}
115540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			x++;
115640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
115740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
115840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
115940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("file size is %d\n",yaffs_lseek(a,0,SEEK_END));
116040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
116140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   }
116240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
116340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   return 0;
116440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
116540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
116640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
116740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint directory_rename_test(void)
116840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
116940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int r;
117040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
117140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
117240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount("/ram");
117340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mkdir("/ram/a",0);
117440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mkdir("/ram/a/b",0);
117540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mkdir("/ram/c",0);
117640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
117740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /ram\n");
117840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/ram");
117940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/ram/a");
118040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/ram/a/b");
118140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
118240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Do rename (should fail)\n");
118340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
118440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_rename("/ram/a","/ram/a/b/d");
118540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /ram\n");
118640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/ram");
118740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/ram/a");
118840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/ram/a/b");
118940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
119040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Do rename (should not fail)\n");
119140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
119240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_rename("/ram/c","/ram/a/b/d");
119340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\nDirectory look-up of /ram\n");
119440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/ram");
119540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/ram/a");
119640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dumpDir("/ram/a/b");
119740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
119840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
119940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	return 1;
120040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
120140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
120240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
120340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint cache_read_test(void)
120440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
120540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int a,b,c;
120640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
120740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int sizeOfFiles = 500000;
120840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char buffer[100];
120940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
121040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
121140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
121240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount("/boot");
121340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
121440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	make_a_file("/boot/a",'a',sizeOfFiles);
121540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	make_a_file("/boot/b",'b',sizeOfFiles);
121640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
121740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	a = yaffs_open("/boot/a",O_RDONLY,0);
121840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	b = yaffs_open("/boot/b",O_RDONLY,0);
121940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	c = yaffs_open("/boot/c", O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
122040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
122140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	do{
122240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		i = sizeOfFiles;
122340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if (i > 100) i = 100;
122440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sizeOfFiles  -= i;
122540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_read(a,buffer,i);
122640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_read(b,buffer,i);
122740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(c,buffer,i);
122840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	} while(sizeOfFiles > 0);
122940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
123040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
123140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
123240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	return 1;
123340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
123440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
123540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
123640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint cache_bypass_bug_test(void)
123740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
123840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// This test reporoduces a bug whereby YAFFS caching *was* buypassed
123940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// resulting in erroneous reads after writes.
124040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// This bug has been fixed.
124140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
124240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int a;
124340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
124440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char buffer1[1000];
124540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char buffer2[1000];
124640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
124740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	memset(buffer1,0,sizeof(buffer1));
124840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	memset(buffer2,0,sizeof(buffer2));
124940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
125040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
125140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
125240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount("/boot");
125340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
125440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Create a file of 2000 bytes.
125540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	make_a_file("/boot/a",'X',2000);
125640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
125740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	a = yaffs_open("/boot/a",O_RDWR, S_IREAD | S_IWRITE);
125840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
125940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Write a short sequence to the file.
126040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// This will go into the cache.
126140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_lseek(a,0,SEEK_SET);
126240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_write(a,"abcdefghijklmnopqrstuvwxyz",20);
126340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
126440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Read a short sequence from the file.
126540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// This will come from the cache.
126640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_lseek(a,0,SEEK_SET);
126740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_read(a,buffer1,30);
126840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
126940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// Read a page size sequence from the file.
127040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_lseek(a,0,SEEK_SET);
127140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_read(a,buffer2,512);
127240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
127340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("buffer 1 %s\n",buffer1);
127440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("buffer 2 %s\n",buffer2);
127540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
127640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(strncmp(buffer1,buffer2,20))
127740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
127840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("Cache bypass bug detected!!!!!\n");
127940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
128040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
128140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
128240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	return 1;
128340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
128440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
128540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
128640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint free_space_check(void)
128740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
128840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f;
128940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
129040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_StartUp();
129140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mount("/boot");
129240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	    fill_disk("/boot/",2);
129340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	    f = yaffs_freespace("/boot");
129440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
129540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	    printf("%d free when disk full\n",f);
129640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	    return 1;
129740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
129840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
129940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint truncate_test(void)
130040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
130140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int a;
130240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int r;
130340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
130440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int l;
130540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
130640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char y[10];
130740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
130840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
130940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount("/boot");
131040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
131140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink("/boot/trunctest");
131240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
131340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	a = yaffs_open("/boot/trunctest", O_CREAT | O_TRUNC | O_RDWR,  S_IREAD | S_IWRITE);
131440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
131540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_write(a,"abcdefghijklmnopqrstuvwzyz",26);
131640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
131740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_truncate(a,3);
131840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	l= yaffs_lseek(a,0,SEEK_END);
131940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
132040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("truncated length is %d\n",l);
132140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
132240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_lseek(a,5,SEEK_SET);
132340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_write(a,"1",1);
132440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
132540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_lseek(a,0,SEEK_SET);
132640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
132740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	r = yaffs_read(a,y,10);
132840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
132940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("read %d bytes:",r);
133040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
133140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < r; i++) printf("[%02X]",y[i]);
133240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
133340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("\n");
133440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
133540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	return 0;
133640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
133740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
133840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
133940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
134040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
134140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
134240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
134340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid fill_disk_test(const char *mountpt)
134440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
134540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
134640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
134740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
134840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < 5; i++)
134940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
135040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mount(mountpt);
135140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		fill_disk_and_delete(mountpt,100,i+1);
135240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_unmount(mountpt);
135340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
135440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
135540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
135640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
135740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
135840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
135940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid lookup_test(const char *mountpt)
136040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
136140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
136240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
136340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[100];
136440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char b[100];
136540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
136640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
136740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_DIR *d;
136840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_dirent *de;
136940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	struct yaffs_stat s;
137040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char str[100];
137140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
137240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
137340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
137440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
137540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
137640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	d = yaffs_opendir(mountpt);
137740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
137840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(!d)
137940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
138040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("opendir failed\n");
138140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
138240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	else
138340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
138440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
138540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(i = 0; (de = yaffs_readdir(d)) != NULL; i++)
138640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
138740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("unlinking %s\n",de->d_name);
138840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_unlink(de->d_name);
138940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
139040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
139140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("%d files deleted\n",i);
139240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
139340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
139440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
139540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < 2000; i++){
139640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"%s/%d",mountpt,i);
139740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		h =  yaffs_open(a,O_CREAT | O_TRUNC | O_RDWR, 0);
139840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_close(h);
139940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
140040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
140140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_rewinddir(d);
140240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; (de = yaffs_readdir(d)) != NULL; i++)
140340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
140440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("%d  %s\n",i,de->d_name);
140540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
140640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
140740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("%d files listed\n\n\n",i);
140840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
140940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_rewinddir(d);
141040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_readdir(d);
141140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_readdir(d);
141240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_readdir(d);
141340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
141440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < 2000; i++){
141540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(a,"%s/%d",mountpt,i);
141640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_unlink(a);
141740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
141840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
141940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
142040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unmount(mountpt);
142140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
142240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
142340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
142440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid link_test(const char *mountpt)
142540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
142640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
142740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
142840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[100];
142940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char b[100];
143040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char c[100];
143140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
143240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int  f0;
143340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f1;
143440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f2;
143540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f3;
143640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"%s/aaa",mountpt);
143740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(b,"%s/bbb",mountpt);
143840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(c,"%s/ccc",mountpt);
143940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
144040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
144140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
144240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
144340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
144440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
144540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open(a, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
144640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < 100; i++)
144740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(h,a,100);
144840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
144940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(h);
145040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
145140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(b);
145240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(c);
145340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_link(a,b);
145440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_link(a,c);
145540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(b);
145640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(c);
145740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(a);
145840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
145940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
146040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unmount(mountpt);
146140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
146240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
146340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("link test done\n");
146440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
146540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
146640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
146740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid freespace_test(const char *mountpt)
146840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
146940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
147040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
147140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[100];
147240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char b[100];
147340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
147440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int  f0;
147540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f1;
147640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f2;
147740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int f3;
147840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"%s/aaa",mountpt);
147940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
148040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
148140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
148240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
148340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
148440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	f0 = yaffs_freespace(mountpt);
148540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
148640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open(a, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
148740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
148840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < 100; i++)
148940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_write(h,a,100);
149040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
149140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(h);
149240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
149340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	f1 = yaffs_freespace(mountpt);
149440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
149540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(a);
149640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
149740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	f2 = yaffs_freespace(mountpt);
149840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
149940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
150040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unmount(mountpt);
150140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
150240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
150340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	f3 = yaffs_freespace(mountpt);
150440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
150540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("%d\n%d\n%d\n%d\n",f0, f1,f2,f3);
150640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
150740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
150840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
150940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
151040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid simple_rw_test(const char *mountpt)
151140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
151240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
151340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
151440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[100];
151540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
151640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int x;
151740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int result;
151840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
151940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"%s/aaa",mountpt);
152040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
152140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
152240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
152340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
152440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
152540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(a);
152640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
152740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	h = yaffs_open(a,O_CREAT| O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
152840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
152940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 100000;i < 200000; i++){
153040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		result = yaffs_write(h,&i,sizeof(i));
153140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
153240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if(result != 4)
153340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
153440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("write error\n");
153540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			exit(1);
153640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
153740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
153840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
153940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//yaffs_close(h);
154040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
154140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// h = yaffs_open(a,O_RDWR, S_IREAD | S_IWRITE);
154240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
154340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
154440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_lseek(h,0,SEEK_SET);
154540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
154640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 100000; i < 200000; i++){
154740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		result = yaffs_read(h,&x,sizeof(x));
154840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
154940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		if(result != 4 || x != i){
155040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("read error %d %x %x\n",i,result,x);
155140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
155240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
155340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
155440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Simple rw test passed\n");
155540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
155640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
155740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
155840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
155940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
156040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
156140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid scan_deleted_files_test(const char *mountpt)
156240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
156340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char fn[100];
156440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char sub[100];
156540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
156640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	const char *p;
156740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
156840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
156940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int j;
157040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int k;
157140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
157240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
157340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(sub,"%s/sdir",mountpt);
157440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
157540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
157640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(j = 0; j < 10; j++)
157740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
157840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("\n\n>>>>>>> Run %d <<<<<<<<<<<<<\n\n",j);
157940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mount(mountpt);
158040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mkdir(sub,0);
158140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
158240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
158340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		p = (j & 0) ? mountpt: sub;
158440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
158540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(i = 0; i < 100; i++)
158640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
158740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  sprintf(fn,"%s/%d",p,i);
158840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
158940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  if(i & 1)
159040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  {
159140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			  h = yaffs_open(fn,O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
159240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			  for(k = 0; k < 1000; k++)
159340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project				  yaffs_write(h,fn,100);
159440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			  yaffs_close(h);
159540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  }
159640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  else
159740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		    	yaffs_mkdir(fn,0);
159840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
159940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
160040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(i = 0; i < 10; i++)
160140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		{
160240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  sprintf(fn,"%s/%d",p,i);
160340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  if(i & 1)
160440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  	yaffs_unlink(fn);
160540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  else
160640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		  	yaffs_rmdir(fn);
160740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
160840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
160940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
161040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_unmount(mountpt);
161140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
161240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
161340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
161440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
161540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
161640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
161740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
161840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
161940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid write_10k(int h)
162040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
162140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int i;
162240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   const char *s="0123456789";
162340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   for(i = 0; i < 1000; i++)
162440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project     yaffs_write(h,s,10);
162540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
162640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
162740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid write_200k_file(const char *fn, const char *fdel, const char *fdel1)
162840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
162940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int h1;
163040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int i;
163140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int offs;
163240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
163340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   h1 = yaffs_open(fn, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
163440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
163540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   for(i = 0; i < 100000; i+= 10000)
163640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   {
163740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   	write_10k(h1);
163840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   }
163940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
164040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   offs = yaffs_lseek(h1,0,SEEK_CUR);
164140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   if( offs != 100000)
164240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   {
164340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   	printf("Could not write file\n");
164440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   }
164540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
164640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_unlink(fdel);
164740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   for(i = 0; i < 100000; i+= 10000)
164840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   {
164940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   	write_10k(h1);
165040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   }
165140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
165240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   offs = yaffs_lseek(h1,0,SEEK_CUR);
165340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   if( offs != 200000)
165440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   {
165540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   	printf("Could not write file\n");
165640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   }
165740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
165840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_close(h1);
165940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_unlink(fdel1);
166040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
166140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
166240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
166340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
166440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid verify_200k_file(const char *fn)
166540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
166640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int h1;
166740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int i;
166840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   char x[11];
166940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   const char *s="0123456789";
167040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   int errCount = 0;
167140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
167240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   h1 = yaffs_open(fn, O_RDONLY, 0);
167340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
167440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   for(i = 0; i < 200000 && errCount < 10; i+= 10)
167540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   {
167640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   	yaffs_read(h1,x,10);
167740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(strncmp(x,s,10) != 0)
167840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
167940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("File %s verification failed at %d\n",fn,i);
168040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		errCount++;
168140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
168240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   }
168340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   if(errCount >= 10)
168440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   	printf("Too many errors... aborted\n");
168540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
168640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   yaffs_close(h1);
168740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
168840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
168940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
169040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
169140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid check_resize_gc_bug(const char *mountpt)
169240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
169340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
169440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[30];
169540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char b[30];
169640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char c[30];
169740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
169840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
169940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
170040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"%s/a",mountpt);
170140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(b,"%s/b",mountpt);
170240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(c,"%s/c",mountpt);
170340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
170440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
170540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
170640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
170740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
170840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
170940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(a);
171040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(b);
171140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
171240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < 50; i++)
171340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	{
171440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   printf("A\n");write_200k_file(a,"",c);
171540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   printf("B\n");verify_200k_file(a);
171640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   printf("C\n");write_200k_file(b,a,c);
171740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   printf("D\n");verify_200k_file(b);
171840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   yaffs_unmount(mountpt);
171940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   yaffs_mount(mountpt);
172040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   printf("E\n");verify_200k_file(a);
172140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	   printf("F\n");verify_200k_file(b);
172240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
172340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
172440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
172540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
172640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
172740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid multi_mount_test(const char *mountpt,int nmounts)
172840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
172940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
173040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[30];
173140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char b[30];
173240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char c[30];
173340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
173440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
173540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int j;
173640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
173740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"%s/a",mountpt);
173840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
173940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
174040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
174140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
174240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
174340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
174440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < nmounts; i++){
174540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("############### Iteration %d   Start\n",i);
174640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mount(mountpt);
174740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		dump_directory_tree(mountpt);
174840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mkdir(a,0);
174940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(j = 0; j < i; j++){
175040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			sprintf(b,"%s/%d",a,j);
175140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			verify_200k_file(b);
175240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
175340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(b,"%s/%d",a,i);
175440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
175540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		write_200k_file(b,"","");
175640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
175740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("######## Iteration %d   End\n",i);
175840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		dump_directory_tree(mountpt);
175940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
176040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_unmount(mountpt);
176140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
176240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
176340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
176440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
176540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid yaffs_touch(const char *fn)
176640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
176740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_chmod(fn, S_IREAD | S_IWRITE);
176840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
176940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
177040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid checkpoint_fill_test(const char *mountpt,int nmounts)
177140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
177240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
177340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[50];
177440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char b[50];
177540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char c[50];
177640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
177740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
177840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int j;
177940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
178040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
178140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"%s/a",mountpt);
178240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
178340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
178440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
178540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
178640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
178740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
178840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(i = 0; i < nmounts; i++){
178940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("############### Iteration %d   Start\n",i);
179040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mount(mountpt);
179140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		dump_directory_tree(mountpt);
179240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mkdir(a,0);
179340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
179440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		sprintf(b,"%s/zz",a);
179540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
179640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		h = yaffs_open(b,O_CREAT | O_RDWR,S_IREAD |S_IWRITE);
179740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
179840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
179940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		while(yaffs_write(h,c,50) == 50){}
180040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
180140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_close(h);
180240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
180340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(j = 0; j < 2; j++){
180440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("touch %d\n",j);
180540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_touch(b);
180640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_unmount(mountpt);
180740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_mount(mountpt);
180840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
180940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
181040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		dump_directory_tree(mountpt);
181140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_unmount(mountpt);
181240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
181340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
181440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
181540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
181640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint make_file2(const char *name1, const char *name2,int syz)
181740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
181840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
181940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char xx[2500];
182040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
182140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h1=-1,h2=-1;
182240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int n = 1;
182340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
182440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
182540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(name1)
182640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		h1 = yaffs_open(name1,O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
182740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	if(name2)
182840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		h2 = yaffs_open(name2,O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
182940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
183040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	while(syz > 0 && n > 0){
183140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		i = (syz > 2500) ? 2500 : syz;
183240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		n = yaffs_write(h1,xx,i);
183340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		n = yaffs_write(h2,xx,i);
183440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		syz -= 500;
183540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
183640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(h1);
183740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_close(h2);
183840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
183940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
184040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
184140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
184240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectextern void SetCheckpointReservedBlocks(int n);
184340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
184440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid checkpoint_upgrade_test(const char *mountpt,int nmounts)
184540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
184640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
184740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[50];
184840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char b[50];
184940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char c[50];
185040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char d[50];
185140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
185240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
185340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int j;
185440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
185540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
185640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"%s/a",mountpt);
185740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
185840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
185940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
186040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
186140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Create start condition\n");
186240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
186340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	SetCheckpointReservedBlocks(0);
186440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
186540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mkdir(a,0);
186640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(b,"%s/zz",a);
186740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(c,"%s/xx",a);
186840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	make_file2(b,c,2000000);
186940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(d,"%s/aa",a);
187040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	make_file2(d,NULL,500000000);
187140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dump_directory_tree(mountpt);
187240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
187340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Umount/mount attempt full\n");
187440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unmount(mountpt);
187540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
187640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	SetCheckpointReservedBlocks(10);
187740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
187840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
187940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("unlink small file\n");
188040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unlink(c);
188140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	dump_directory_tree(mountpt);
188240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
188340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	printf("Umount/mount attempt\n");
188440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_unmount(mountpt);
188540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
188640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
188740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(j = 0; j < 500; j++){
188840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("***** touch %d\n",j);
188940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		dump_directory_tree(mountpt);
189040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_touch(b);
189140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_unmount(mountpt);
189240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mount(mountpt);
189340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
189440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
189540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	for(j = 0; j < 500; j++){
189640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("***** touch %d\n",j);
189740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		dump_directory_tree(mountpt);
189840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_touch(b);
189940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_unmount(mountpt);
190040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		yaffs_mount(mountpt);
190140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
190240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
190340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
190440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectvoid huge_array_test(const char *mountpt,int n)
190540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
190640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
190740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	char a[50];
190840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
190940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
191040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int i;
191140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int j;
191240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int h;
191340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
191440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	int fnum;
191540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
191640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	sprintf(a,"mount point %s",mountpt);
191740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
191840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
191940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
192040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_StartUp();
192140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
192240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	yaffs_mount(mountpt);
192340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
192440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	while(n>0){
192540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		n--;
192640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		fnum = 0;
192740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("\n\n START run\n\n");
192840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		while(yaffs_freespace(mountpt) > 25000000){
192940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			sprintf(a,"%s/file%d",mountpt,fnum);
193040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			fnum++;
193140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("create file %s\n",a);
193240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			create_file_of_size(a,10000000);
193340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("verifying file %s\n",a);
193440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			verify_file_of_size(a,10000000);
193540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
193640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
193740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("\n\n\ verification/deletion\n\n");
193840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
193940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		for(i = 0; i < fnum; i++){
194040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			sprintf(a,"%s/file%d",mountpt,i);
194140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("verifying file %s\n",a);
194240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			verify_file_of_size(a,10000000);
194340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			printf("deleting file %s\n",a);
194440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project			yaffs_unlink(a);
194540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		}
194640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project		printf("\n\n\ done \n\n");
194740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
194840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
194940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	}
195040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
195140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
195240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
195340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
195440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectint main(int argc, char *argv[])
195540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project{
195640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//return long_test(argc,argv);
195740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
195840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//return cache_read_test();
195940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
196040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//resize_stress_test_no_grow("/flash",20);
196140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
196240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//huge_directory_test_on_path("/ram2k");
196340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
196440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	 //yaffs_backward_scan_test("/flash/flash");
196540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// yaffs_device_flush_test("/flash/flash");
196640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
196740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
196840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	 //scan_pattern_test("/flash",10000,10);
196940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//short_scan_test("/flash/flash",40000,200);
197040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	 //multi_mount_test("/flash/flash",20);
197140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	 //checkpoint_fill_test("/flash/flash",20);
197240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	 //checkpoint_upgrade_test("/flash/flash",20);
197340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	  huge_array_test("/flash/flash",10);
197440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
197540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
197640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
197740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
197840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//long_test_on_path("/ram2k");
197940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// long_test_on_path("/flash");
198040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//simple_rw_test("/flash/flash");
198140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//fill_disk_test("/flash/flash");
198240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// rename_over_test("/flash");
198340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//lookup_test("/flash");
198440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//freespace_test("/flash/flash");
198540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
198640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	//link_test("/flash/flash");
198740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
198840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
198940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
199040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
199140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	// cache_bypass_bug_test();
199240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
199340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	 //free_space_check();
199440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
199540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	 //check_resize_gc_bug("/flash");
199640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
199740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	 return 0;
199840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
199940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
2000