mirror of
https://github.com/hathach/tinyusb.git
synced 2025-02-15 21:40:18 +00:00
implement cp command
This commit is contained in:
parent
bf69ffb8f7
commit
2312bfe3c4
@ -269,8 +269,9 @@ DRESULT disk_ioctl (
|
||||
// CLI Commands
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
void cli_cmd_cd(EmbeddedCli *cli, char *args, void *context);
|
||||
void cli_cmd_cat(EmbeddedCli *cli, char *args, void *context);
|
||||
void cli_cmd_cd(EmbeddedCli *cli, char *args, void *context);
|
||||
void cli_cmd_cp(EmbeddedCli *cli, char *args, void *context);
|
||||
void cli_cmd_ls(EmbeddedCli *cli, char *args, void *context);
|
||||
void cli_cmd_mkdir(EmbeddedCli *cli, char *args, void *context);
|
||||
void cli_cmd_mv(EmbeddedCli *cli, char *args, void *context);
|
||||
@ -320,6 +321,14 @@ bool cli_init(void)
|
||||
cli_cmd_cd
|
||||
});
|
||||
|
||||
embeddedCliAddBinding(_cli, (CliCommandBinding) {
|
||||
"cp",
|
||||
"Usage: cp SOURCE DEST\r\n\tCopy SOURCE to DEST.",
|
||||
true,
|
||||
NULL,
|
||||
cli_cmd_cp
|
||||
});
|
||||
|
||||
embeddedCliAddBinding(_cli, (CliCommandBinding) {
|
||||
"ls",
|
||||
"Usage: ls [DIR]...\r\n\tList information about the FILEs (the current directory by default).",
|
||||
@ -370,7 +379,7 @@ void cli_cmd_cat(EmbeddedCli *cli, char *args, void *context)
|
||||
printf("%s: No such file or directory\r\n", fpath);
|
||||
}else
|
||||
{
|
||||
uint8_t buf[64];
|
||||
uint8_t buf[512];
|
||||
size_t count = 0;
|
||||
while ( (FR_OK == f_read(&fi, buf, sizeof(buf), &count)) && (count > 0) )
|
||||
{
|
||||
@ -415,6 +424,54 @@ void cli_cmd_cd(EmbeddedCli *cli, char *args, void *context)
|
||||
}
|
||||
}
|
||||
|
||||
void cli_cmd_cp(EmbeddedCli *cli, char *args, void *context)
|
||||
{
|
||||
(void) cli; (void) context;
|
||||
|
||||
uint16_t argc = embeddedCliGetTokenCount(args);
|
||||
if ( argc != 2 )
|
||||
{
|
||||
printf("invalid arguments\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// default is current directory
|
||||
const char* src = embeddedCliGetToken(args, 1);
|
||||
const char* dst = embeddedCliGetToken(args, 2);
|
||||
|
||||
FIL f_src;
|
||||
FIL f_dst;
|
||||
|
||||
if ( FR_OK != f_open(&f_src, src, FA_READ) )
|
||||
{
|
||||
printf("cannot stat '%s': No such file or directory\r\n", src);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( FR_OK != f_open(&f_dst, dst, FA_WRITE | FA_CREATE_ALWAYS) )
|
||||
{
|
||||
printf("cannot create '%s'\r\n", dst);
|
||||
return;
|
||||
}else
|
||||
{
|
||||
uint8_t buf[512];
|
||||
size_t rd_count = 0;
|
||||
while ( (FR_OK == f_read(&f_src, buf, sizeof(buf), &rd_count)) && (rd_count > 0) )
|
||||
{
|
||||
size_t wr_count = 0;
|
||||
|
||||
if ( FR_OK != f_write(&f_dst, buf, rd_count, &wr_count) )
|
||||
{
|
||||
printf("cannot write to '%s'\r\n", dst);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
f_close(&f_src);
|
||||
f_close(&f_dst);
|
||||
}
|
||||
|
||||
void cli_cmd_ls(EmbeddedCli *cli, char *args, void *context)
|
||||
{
|
||||
(void) cli; (void) context;
|
||||
|
Loading…
x
Reference in New Issue
Block a user