forked from len0rd/rockbox
Added a truckload of test code.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2829 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
9f9c495662
commit
4cde667659
1 changed files with 238 additions and 28 deletions
|
@ -2,6 +2,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#include "fat.h"
|
#include "fat.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "disk.h"
|
#include "disk.h"
|
||||||
|
@ -84,13 +86,15 @@ void dbg_dir(char* currdir)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CHUNKSIZE 8
|
#define CHUNKSIZE 8
|
||||||
|
#define BUFSIZE 8192
|
||||||
|
|
||||||
int dbg_mkfile(char* name, int num)
|
int dbg_mkfile(char* name, int num)
|
||||||
{
|
{
|
||||||
char text[8192];
|
char text[BUFSIZE+1];
|
||||||
int i;
|
int i;
|
||||||
int fd;
|
int fd;
|
||||||
int x=0;
|
int x=0;
|
||||||
|
bool stop = false;
|
||||||
|
|
||||||
fd = open(name,O_WRONLY);
|
fd = open(name,O_WRONLY);
|
||||||
if (fd<0) {
|
if (fd<0) {
|
||||||
|
@ -100,7 +104,7 @@ int dbg_mkfile(char* name, int num)
|
||||||
num *= 1024;
|
num *= 1024;
|
||||||
while ( num ) {
|
while ( num ) {
|
||||||
int rc;
|
int rc;
|
||||||
int len = num > sizeof text ? sizeof text : num;
|
int len = num > BUFSIZE ? BUFSIZE : num;
|
||||||
|
|
||||||
for (i=0; i<len/CHUNKSIZE; i++ )
|
for (i=0; i<len/CHUNKSIZE; i++ )
|
||||||
sprintf(text+i*CHUNKSIZE,"%c%06x,",name[1],x++);
|
sprintf(text+i*CHUNKSIZE,"%c%06x,",name[1],x++);
|
||||||
|
@ -113,23 +117,35 @@ int dbg_mkfile(char* name, int num)
|
||||||
else
|
else
|
||||||
if ( rc == 0 ) {
|
if ( rc == 0 ) {
|
||||||
DEBUGF("No space left\n");
|
DEBUGF("No space left\n");
|
||||||
break;
|
return -2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DEBUGF("wrote %d bytes\n",rc);
|
DEBUGF("wrote %d bytes\n",rc);
|
||||||
|
|
||||||
num -= len;
|
num -= len;
|
||||||
|
|
||||||
|
if ( !num ) {
|
||||||
|
if ( stop )
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* add a random number of chunks to test byte-copy code */
|
||||||
|
num = ((int) rand() % SECTOR_SIZE) & ~7;
|
||||||
|
LDEBUGF("Adding random size %d\n",num);
|
||||||
|
stop = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int dbg_chkfile(char* name, int size)
|
int dbg_chkfile(char* name, int size)
|
||||||
{
|
{
|
||||||
char text[81920];
|
char text[81920];
|
||||||
int i;
|
int i;
|
||||||
int x=0;
|
int x=0;
|
||||||
|
int pos = 0;
|
||||||
int block=0;
|
int block=0;
|
||||||
int fd = open(name,O_RDONLY);
|
int fd = open(name,O_RDONLY);
|
||||||
if (fd<0) {
|
if (fd<0) {
|
||||||
|
@ -137,18 +153,21 @@ int dbg_chkfile(char* name, int size)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size) {
|
size = lseek(fd, 0, SEEK_END);
|
||||||
lseek(fd, size*512, SEEK_SET);
|
DEBUGF("File is %d bytes\n", size);
|
||||||
x = size * 1024 / 16;
|
/* random start position */
|
||||||
LDEBUGF("Check base is %x\n",x);
|
if ( size )
|
||||||
}
|
pos = ((int)rand() % size) & ~7;
|
||||||
|
lseek(fd, pos, SEEK_SET);
|
||||||
|
x = pos / CHUNKSIZE;
|
||||||
|
|
||||||
|
LDEBUGF("Check base is %x (%d)\n",x,pos);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
int rc = read(fd, text, sizeof text);
|
int rc = read(fd, text, sizeof text);
|
||||||
DEBUGF("read %d bytes\n",rc);
|
DEBUGF("read %d bytes\n",rc);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
DEBUGF("Failed writing data\n");
|
panicf("Failed reading data\n");
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char tmp[CHUNKSIZE+1];
|
char tmp[CHUNKSIZE+1];
|
||||||
|
@ -157,13 +176,86 @@ int dbg_chkfile(char* name, int size)
|
||||||
for (i=0; i<rc/CHUNKSIZE; i++ ) {
|
for (i=0; i<rc/CHUNKSIZE; i++ ) {
|
||||||
sprintf(tmp,"%c%06x,",name[1],x++);
|
sprintf(tmp,"%c%06x,",name[1],x++);
|
||||||
if (strncmp(text+i*CHUNKSIZE,tmp,CHUNKSIZE)) {
|
if (strncmp(text+i*CHUNKSIZE,tmp,CHUNKSIZE)) {
|
||||||
DEBUGF("Mismatch in byte %x (sector %d). Expected %.8s found %.8s\n",
|
int idx = pos + block*sizeof(text) + i*CHUNKSIZE;
|
||||||
block*sizeof(text)+i*CHUNKSIZE,
|
DEBUGF("Mismatch in byte 0x%x (byte 0x%x of sector 0x%x)."
|
||||||
(block*sizeof(text)+i*CHUNKSIZE) / SECTOR_SIZE,
|
"\nExpected %.8s found %.8s\n",
|
||||||
|
idx, idx % SECTOR_SIZE, idx / SECTOR_SIZE,
|
||||||
tmp,
|
tmp,
|
||||||
text+i*CHUNKSIZE);
|
text+i*CHUNKSIZE);
|
||||||
dbg_dump_buffer(text+i*CHUNKSIZE - 0x20, 0x40,
|
DEBUGF("i=%x, idx=%x\n",i,idx);
|
||||||
block*sizeof(text)+i*CHUNKSIZE - 0x20);
|
dbg_dump_buffer(text+i*CHUNKSIZE - 0x20, 0x40, idx - 0x20);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
block++;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dbg_wrtest(char* name)
|
||||||
|
{
|
||||||
|
char text[81920];
|
||||||
|
int i;
|
||||||
|
int x=0;
|
||||||
|
int pos = 0;
|
||||||
|
int block=0;
|
||||||
|
int size, fd, rc;
|
||||||
|
char tmp[CHUNKSIZE+1];
|
||||||
|
|
||||||
|
fd = open(name,O_RDWR);
|
||||||
|
if (fd<0) {
|
||||||
|
DEBUGF("Failed opening file\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = lseek(fd, 0, SEEK_END);
|
||||||
|
DEBUGF("File is %d bytes\n", size);
|
||||||
|
/* random start position */
|
||||||
|
if ( size )
|
||||||
|
pos = ((int)rand() % size) & ~7;
|
||||||
|
rc = lseek(fd, pos, SEEK_SET);
|
||||||
|
if ( rc < 0 )
|
||||||
|
panicf("Failed seeking\n");
|
||||||
|
x = pos / CHUNKSIZE;
|
||||||
|
LDEBUGF("Check base is %x (%d)\n",x,pos);
|
||||||
|
|
||||||
|
sprintf(tmp,"%c%06x,",name[1],x++);
|
||||||
|
rc = write(fd, tmp, 8);
|
||||||
|
if ( rc < 0 )
|
||||||
|
panicf("Failed writing data\n");
|
||||||
|
|
||||||
|
if ( size )
|
||||||
|
pos = ((int)rand() % size) & ~7;
|
||||||
|
rc = lseek(fd, pos, SEEK_SET);
|
||||||
|
if ( rc < 0 )
|
||||||
|
panicf("Failed seeking\n");
|
||||||
|
x = pos / CHUNKSIZE;
|
||||||
|
LDEBUGF("Check base 2 is %x (%d)\n",x,pos);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
rc = read(fd, text, sizeof text);
|
||||||
|
DEBUGF("read %d bytes\n",rc);
|
||||||
|
if (rc < 0) {
|
||||||
|
panicf("Failed reading data\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!rc)
|
||||||
|
break;
|
||||||
|
for (i=0; i<rc/CHUNKSIZE; i++ ) {
|
||||||
|
sprintf(tmp,"%c%06x,",name[1],x++);
|
||||||
|
if (strncmp(text+i*CHUNKSIZE,tmp,CHUNKSIZE)) {
|
||||||
|
int idx = pos + block*sizeof(text) + i*CHUNKSIZE;
|
||||||
|
DEBUGF("Mismatch in byte 0x%x (byte 0x%x of sector 0x%x)."
|
||||||
|
"\nExpected %.8s found %.8s\n",
|
||||||
|
idx, idx % SECTOR_SIZE, idx / SECTOR_SIZE,
|
||||||
|
tmp,
|
||||||
|
text+i*CHUNKSIZE);
|
||||||
|
DEBUGF("i=%x, idx=%x\n",i,idx);
|
||||||
|
dbg_dump_buffer(text+i*CHUNKSIZE - 0x20, 0x40, idx - 0x20);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,6 +299,64 @@ void dbg_type(char* name)
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int dbg_append(char* name)
|
||||||
|
{
|
||||||
|
int x=0;
|
||||||
|
int size, fd, rc;
|
||||||
|
char tmp[CHUNKSIZE+1];
|
||||||
|
|
||||||
|
fd = open(name,O_RDONLY);
|
||||||
|
if (fd<0) {
|
||||||
|
DEBUGF("Failed opening file\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = lseek(fd, 0, SEEK_END);
|
||||||
|
DEBUGF("File is %d bytes\n", size);
|
||||||
|
x = size / CHUNKSIZE;
|
||||||
|
LDEBUGF("Check base is %x (%d)\n",x,size);
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
fd = open(name,O_RDWR|O_APPEND);
|
||||||
|
if (fd<0) {
|
||||||
|
DEBUGF("Failed opening file\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(tmp,"%c%06x,",name[1],x++);
|
||||||
|
rc = write(fd, tmp, 8);
|
||||||
|
if ( rc < 0 )
|
||||||
|
panicf("Failed writing data\n");
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dbg_dump(char* name, int offset)
|
||||||
|
{
|
||||||
|
char buf[SECTOR_SIZE];
|
||||||
|
|
||||||
|
int rc;
|
||||||
|
int fd = open(name,O_RDONLY);
|
||||||
|
if (fd<0) {
|
||||||
|
DEBUGF("Failed opening file\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
lseek(fd, offset, SEEK_SET);
|
||||||
|
rc = read(fd, buf, sizeof buf);
|
||||||
|
|
||||||
|
if ( rc < 0 )
|
||||||
|
panicf("Error reading data\n");
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
dbg_dump_buffer(buf, rc, offset);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void dbg_tail(char* name)
|
void dbg_tail(char* name)
|
||||||
{
|
{
|
||||||
unsigned char buf[SECTOR_SIZE*5];
|
unsigned char buf[SECTOR_SIZE*5];
|
||||||
|
@ -240,14 +390,14 @@ void dbg_tail(char* name)
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dbg_head(char* name)
|
int dbg_head(char* name)
|
||||||
{
|
{
|
||||||
unsigned char buf[SECTOR_SIZE*5];
|
unsigned char buf[SECTOR_SIZE*5];
|
||||||
int fd,rc;
|
int fd,rc;
|
||||||
|
|
||||||
fd = open(name,O_RDONLY);
|
fd = open(name,O_RDONLY);
|
||||||
if (fd<0)
|
if (fd<0)
|
||||||
return;
|
return -1;
|
||||||
DEBUGF("Got file descriptor %d\n",fd);
|
DEBUGF("Got file descriptor %d\n",fd);
|
||||||
|
|
||||||
rc = read(fd, buf, SECTOR_SIZE*3);
|
rc = read(fd, buf, SECTOR_SIZE*3);
|
||||||
|
@ -265,19 +415,36 @@ void dbg_head(char* name)
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dbg_del(char* name)
|
int dbg_trunc(char* name, int size)
|
||||||
{
|
{
|
||||||
return remove(name);
|
int fd,rc;
|
||||||
}
|
|
||||||
|
|
||||||
char current_directory[256] = "\\";
|
#if 1
|
||||||
int last_secnum = 0;
|
fd = open(name,O_RDWR);
|
||||||
|
if (fd<0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
void dbg_prompt(void)
|
rc = ftruncate(fd, size);
|
||||||
{
|
if (rc<0) {
|
||||||
DEBUGF("C:%s> ", current_directory);
|
DEBUGF("ftruncate(%d) failed\n", size);
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
fd = open(name,O_RDWR|O_TRUNC);
|
||||||
|
if (fd<0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
rc = lseek(fd, size, SEEK_SET);
|
||||||
|
if (fd<0)
|
||||||
|
return -2;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dbg_cmd(int argc, char *argv[])
|
int dbg_cmd(int argc, char *argv[])
|
||||||
|
@ -306,6 +473,11 @@ int dbg_cmd(int argc, char *argv[])
|
||||||
" mkfile <file> <size (KB)>\n"
|
" mkfile <file> <size (KB)>\n"
|
||||||
" chkfile <file>\n"
|
" chkfile <file>\n"
|
||||||
" del <file>\n"
|
" del <file>\n"
|
||||||
|
" dump <file> <offset>\n"
|
||||||
|
" mkdir <dir>\n"
|
||||||
|
" trunc <file> <size>\n"
|
||||||
|
" wrtest <file>\n"
|
||||||
|
" append <file>\n"
|
||||||
);
|
);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -335,7 +507,7 @@ int dbg_cmd(int argc, char *argv[])
|
||||||
if (!strcasecmp(cmd, "head"))
|
if (!strcasecmp(cmd, "head"))
|
||||||
{
|
{
|
||||||
if (arg1)
|
if (arg1)
|
||||||
dbg_head(arg1);
|
return dbg_head(arg1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcasecmp(cmd, "tail"))
|
if (!strcasecmp(cmd, "tail"))
|
||||||
|
@ -367,7 +539,41 @@ int dbg_cmd(int argc, char *argv[])
|
||||||
if (!strcasecmp(cmd, "del"))
|
if (!strcasecmp(cmd, "del"))
|
||||||
{
|
{
|
||||||
if (arg1)
|
if (arg1)
|
||||||
return dbg_del(arg1);
|
return remove(arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcasecmp(cmd, "dump"))
|
||||||
|
{
|
||||||
|
if (arg1) {
|
||||||
|
if (arg2)
|
||||||
|
return dbg_dump(arg1, atoi(arg2));
|
||||||
|
else
|
||||||
|
return dbg_dump(arg1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcasecmp(cmd, "dump"))
|
||||||
|
{
|
||||||
|
if (arg1)
|
||||||
|
return mkdir(arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcasecmp(cmd, "wrtest"))
|
||||||
|
{
|
||||||
|
if (arg1)
|
||||||
|
return dbg_wrtest(arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcasecmp(cmd, "append"))
|
||||||
|
{
|
||||||
|
if (arg1)
|
||||||
|
return dbg_append(arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcasecmp(cmd, "trunc"))
|
||||||
|
{
|
||||||
|
if (arg1 && arg2)
|
||||||
|
return dbg_trunc(arg1, atoi(arg2));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -379,6 +585,10 @@ int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int rc,i;
|
int rc,i;
|
||||||
struct partinfo* pinfo;
|
struct partinfo* pinfo;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
srand(tv.tv_usec);
|
||||||
|
|
||||||
if(ata_init("disk.img")) {
|
if(ata_init("disk.img")) {
|
||||||
DEBUGF("*** Warning! The disk is uninitialized\n");
|
DEBUGF("*** Warning! The disk is uninitialized\n");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue