📄 helper_cmds.c
字号:
return TRUE;
}
BOOL cmdCat(const char *tail)
{
uffs_Object *obj;
const char *name;
char buf[100];
int len;
if (!tail) return FALSE;
name = cli_getparam(tail, NULL);
obj = uffs_GetObject();
if (!obj) return FALSE;
if (uffs_OpenObject(obj, name, UO_RDONLY, US_IREAD) == U_FAIL) {
uffs_Perror(UFFS_ERR_NORMAL, "Can't open %s\n", name);
goto fail;
}
while (uffs_EndOfFile(obj) == 0) {
len = uffs_ReadObject(obj, buf, sizeof(buf) - 1);
if (len == 0) break;
if (len > 0) {
buf[len] = 0;
uffs_Perror(UFFS_ERR_NORMAL, "%s", buf);
}
}
uffs_Perror(UFFS_ERR_NORMAL, "\n");
uffs_CloseObject(obj);
fail:
uffs_PutObject(obj);
return TRUE;
}
static URET test_verify_file(const char *file_name)
{
uffs_Object *f = NULL;
int ret = U_FAIL;
unsigned char buf[100];
int i, pos, len;
f = uffs_GetObject();
if (f == NULL) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Fail to get object.\n");
goto test_exit;
}
if (uffs_OpenObject(f, file_name, UO_RDONLY, US_IREAD) != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Can't open file %s for read.\n", file_name);
goto test_exit;
}
pos = 0;
while (!uffs_EndOfFile(f)) {
len = uffs_ReadObject(f, buf, sizeof(buf));
for (i = 0; i < len; i++) {
if (buf[i] != (pos++ & 0xFF)) {
pos--;
uffs_Perror(UFFS_ERR_NORMAL, PFX"Verify file %s failed at: %d, expect %x but got %x\n", file_name, pos, pos & 0xFF, buf[i]);
goto test_failed;
}
}
}
if (pos != uffs_SeekObject(f, 0, USEEK_END)) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Verify file %s failed. invalid file length.\n", file_name);
goto test_failed;
}
uffs_Perror(UFFS_ERR_NORMAL, PFX"Verify file %s succ.\n", file_name);
ret = U_SUCC;
test_failed:
uffs_CloseObject(f);
test_exit:
uffs_PutObject(f);
return ret;
}
static URET do_write_test_file(uffs_Object *f, int size)
{
long pos;
unsigned char buf[100];
unsigned char data;
int i, len;
while (size > 0) {
pos = uffs_SeekObject(f, 0, USEEK_CUR);
len = (size > sizeof(buf) ? sizeof(buf) : size);
data = pos & 0xFF;
for (i = 0; i < len; i++, data++) {
buf[i] = data;
}
if (uffs_WriteObject(f, buf, len) != len) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Write file failed, size %d at %d\n", len, pos);
return U_FAIL;
}
size -= len;
}
return U_SUCC;
}
static URET test_append_file(const char *file_name, int size)
{
int ret = U_FAIL;
uffs_Object *f = NULL;
f = uffs_GetObject();
if (f == NULL) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Fail to get object.\n");
goto test_exit;
}
if (uffs_OpenObject(f, file_name, UO_RDWR|UO_APPEND|UO_CREATE, US_IREAD|US_IWRITE) != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Can't open file %s for append.\n", file_name);
goto test_exit;
}
uffs_SeekObject(f, 0, USEEK_END);
if (do_write_test_file(f, size) == U_FAIL) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Write file %s failed.\n", file_name);
goto test_failed;
}
ret = U_SUCC;
test_failed:
uffs_CloseObject(f);
test_exit:
if (f) uffs_PutObject(f);
return ret;
}
static URET test_write_file(const char *file_name, int pos, int size)
{
int ret = U_FAIL;
uffs_Object *f = NULL;
f = uffs_GetObject();
if (f == NULL) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Fail to get object.\n");
goto test_exit;
}
if (uffs_OpenObject(f, file_name, UO_RDWR|UO_CREATE, US_IREAD|US_IWRITE) != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Can't open file %s for write.\n", file_name);
goto test_exit;
}
if (uffs_SeekObject(f, pos, USEEK_SET) != pos) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Can't seek file %s at pos %d\n", file_name, pos);
goto test_failed;
}
if (do_write_test_file(f, size) == U_FAIL) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Write file %s failed.\n", file_name);
goto test_failed;
}
ret = U_SUCC;
test_failed:
uffs_CloseObject(f);
test_exit:
if (f) uffs_PutObject(f);
return ret;
}
static URET DoTest2(void)
{
uffs_Object *f;
URET ret = U_FAIL;
char buf[100], buf_1[100];
f = uffs_GetObject();
if (f == NULL) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Fail to get object.\n");
goto exit_test;
}
ret = uffs_OpenObject(f, "/abc/", UO_RDWR|UO_DIR, US_IREAD|US_IWRITE);
if (ret != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Can't open dir abc, err: %d\n", f->err);
uffs_Perror(UFFS_ERR_NORMAL, PFX"Try to create a new one...\n");
ret = uffs_OpenObject(f, "/abc/", UO_RDWR|UO_CREATE|UO_DIR, US_IREAD|US_IWRITE);
if (ret != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Can't create new dir /abc/\n");
goto exit_test;
}
else {
uffs_CloseObject(f);
}
}
else {
uffs_CloseObject(f);
}
ret = uffs_OpenObject(f, "/abc/test.txt", UO_RDWR|UO_CREATE, US_IWRITE|US_IREAD);
if (ret != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Can't open /abc/test.txt\n");
goto exit_test;
}
sprintf(buf, "123456789ABCDEF");
ret = uffs_WriteObject(f, buf, strlen(buf));
uffs_Perror(UFFS_ERR_NORMAL, PFX"write %d bytes to file, content: %s\n", ret, buf);
ret = uffs_SeekObject(f, 3, USEEK_SET);
uffs_Perror(UFFS_ERR_NORMAL, PFX"new file position: %d\n", ret);
memset(buf_1, 0, sizeof(buf_1));
ret = uffs_ReadObject(f, buf_1, 5);
uffs_Perror(UFFS_ERR_NORMAL, PFX"read %d bytes, content: %s\n", ret, buf_1);
if (memcmp(buf + 3, buf_1, 5) != 0) {
ret = U_FAIL;
}
else {
ret = U_SUCC;
}
uffs_CloseObject(f);
exit_test:
if (f) {
uffs_PutObject(f);
}
return ret;
}
BOOL cmdTest1(const char *tail)
{
uffs_Object *f;
URET ret;
char buf[100];
const char *name;
if (!tail) {
return FALSE;
}
name = cli_getparam(tail, NULL);
f = uffs_GetObject();
if (f == NULL) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Fail to get object.\n");
return TRUE;
}
ret = uffs_OpenObject(f, name, UO_RDWR|UO_CREATE|UO_TRUNC, US_IWRITE|US_IREAD);
if (ret != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, PFX"Can't open %s\n", name);
goto fail;
}
sprintf(buf, "123456789ABCDEF");
ret = uffs_WriteObject(f, buf, strlen(buf));
uffs_Perror(UFFS_ERR_NORMAL, PFX"write %d bytes to file, content: %s\n", ret, buf);
ret = uffs_SeekObject(f, 3, USEEK_SET);
uffs_Perror(UFFS_ERR_NORMAL, PFX"new file position: %d\n", ret);
memset(buf, 0, sizeof(buf));
ret = uffs_ReadObject(f, buf, 5);
uffs_Perror(UFFS_ERR_NORMAL, PFX"read %d bytes, content: %s\n", ret, buf);
uffs_CloseObject(f);
fail:
uffs_PutObject(f);
return TRUE;
}
BOOL cmdTest2(const char *tail)
{
uffs_Perror(UFFS_ERR_NORMAL, "Test return: %s !\n", DoTest2() == U_SUCC ? "succ" : "failed");
return TRUE;
}
BOOL cmdTest3(const char *tail)
{
const char *name;
int i;
int write_test_seq[] = { 20, 10, 500, 40, 1140, 900, 329, 4560, 352, 1100 };
if (!tail) {
return FALSE;
}
name = cli_getparam(tail, NULL);
uffs_Perror(UFFS_ERR_NORMAL, "Test append file %s ...\n", name);
for (i = 1; i < 500; i += 29) {
if (test_append_file(name, i) != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, "Append file %s test failed at %d !\n", name, i);
return TRUE;
}
//if (test_verify_file(name) != U_SUCC) {
// uffs_Perror(UFFS_ERR_NORMAL, "Verify file %s failed at test no: %d.\n", name, i);
//}
}
uffs_Perror(UFFS_ERR_NORMAL, "Check file %s ... \n", name);
if (test_verify_file(name) != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, "Verify file %s failed.\n", name);
return TRUE;
}
uffs_Perror(UFFS_ERR_NORMAL, "Test write file ...\n");
for (i = 0; i < sizeof(write_test_seq) / sizeof(int) - 1; i++) {
if (test_write_file(name, write_test_seq[i], write_test_seq[i+1]) != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, "Test write file failed !\n");
return TRUE;
}
}
uffs_Perror(UFFS_ERR_NORMAL, "Check file %s ... \n", name);
if (test_verify_file(name) != U_SUCC) {
uffs_Perror(UFFS_ERR_NORMAL, "Verify file %s failed.\n", name);
return TRUE;
}
uffs_Perror(UFFS_ERR_NORMAL, "Test succ !\n");
return TRUE;
}
BOOL cmdMount(const char *tail)
{
uffs_mountTable *tab = uffs_GetMountTable();
tail = tail;
while (tab) {
uffs_Perror(UFFS_ERR_NORMAL, PFX" %s : (%d) ~ (%d)\n", tab->mountPoint, tab->startBlock, tab->endBlock);
tab = tab->next;
}
return TRUE;
}
static struct cli_commandset cmdset[] =
{
{ cmdFormat, "format", "[<mount>]", "Format device" },
{ cmdMkf, "mkfile", "<name>", "create a new file" },
{ cmdMkdir, "mkdir", "<name>", "create a new directory" },
{ cmdRm, "rm", "<name>", "delete file/directory" },
{ cmdRen, "mv|ren", "<old> <new>", "rename file/directory" },
{ cmdLs, "ls", "<dir>", "list dirs and files" },
{ cmdSt, "info|st", "<mount>", "show statistic infomation" },
{ cmdTest1, "t1", "<name>", "test 1" },
{ cmdTest2, "t2", NULL, "test 2" },
{ cmdTest3, "t3", "<name>", "test 3" },
{ cmdCp, "cp", "<src> <des>", "copy files. the local file name start with '::'" },
{ cmdCat, "cat", "<name>", "show file content" },
{ cmdPwd, "pwd", NULL, "show current dir" },
{ cmdCd, "cd", "<path>", "change current dir" },
{ cmdMount, "mount", NULL, "list mounted file systems" },
{ NULL, NULL, NULL, NULL }
};
struct cli_commandset * get_helper_cmds()
{
return cmdset;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -