Added a simple "cat" command. Fixed VFS overlay driver file open.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@15203 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
fe6602f75f
commit
a07310d3cd
|
@ -238,7 +238,7 @@ static void scan_nodes(BaseSequentialStream *chp,
|
|||
msg_t res;
|
||||
vfs_directory_node_c *dirp;
|
||||
|
||||
chprintf(chp, "%s\r\n", path);
|
||||
chprintf(chp, "%s" SHELL_NEWLINE_STR, path);
|
||||
res = vfsOpenDirectory(path, &dirp);
|
||||
if (res == VFS_RET_SUCCESS) {
|
||||
size_t i = strlen(path);
|
||||
|
@ -258,7 +258,7 @@ static void scan_nodes(BaseSequentialStream *chp,
|
|||
path[i] = '\0';
|
||||
}
|
||||
else {
|
||||
chprintf(chp, "%s%s\r\n", path, fn);
|
||||
chprintf(chp, "%s%s" SHELL_NEWLINE_STR, path, fn);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -273,7 +273,7 @@ static void cmd_tree(BaseSequentialStream *chp, int argc, char *argv[]) {
|
|||
(void)argv;
|
||||
|
||||
if (argc > 0) {
|
||||
chprintf(chp, "Usage: tree\r\n");
|
||||
chprintf(chp, "Usage: tree" SHELL_NEWLINE_STR);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -281,7 +281,7 @@ static void cmd_tree(BaseSequentialStream *chp, int argc, char *argv[]) {
|
|||
pathbuf = (char *)chHeapAlloc(NULL, 1024);
|
||||
nip = (vfs_node_info_t *)chHeapAlloc(NULL, 1024);
|
||||
if ((pathbuf == NULL) || (nip == NULL)) {
|
||||
chprintf(chp, "Out of memory\r\n");
|
||||
chprintf(chp, "Out of memory" SHELL_NEWLINE_STR);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -303,7 +303,7 @@ static void cmd_cat(BaseSequentialStream *chp, int argc, char *argv[]) {
|
|||
char *buf = NULL;
|
||||
|
||||
if (argc != 1) {
|
||||
chprintf(chp, "Usage: cat <filename>\r\n");
|
||||
chprintf(chp, "Usage: cat <filename>" SHELL_NEWLINE_STR);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -312,19 +312,20 @@ static void cmd_cat(BaseSequentialStream *chp, int argc, char *argv[]) {
|
|||
|
||||
buf= (char *)chHeapAlloc(NULL, 2048);
|
||||
if (buf == NULL) {
|
||||
chprintf(chp, "Out of memory\r\n");
|
||||
chprintf(chp, "Out of memory" SHELL_NEWLINE_STR);
|
||||
break;
|
||||
}
|
||||
|
||||
fd = open(argv[1], O_RDONLY);
|
||||
fd = open(argv[0], O_RDONLY);
|
||||
if(fd == -1) {
|
||||
chprintf(chp, "Cannot open file\r\n");
|
||||
chprintf(chp, "Cannot open file" SHELL_NEWLINE_STR);
|
||||
break;
|
||||
}
|
||||
|
||||
while ((n = read(fd, buf, sizeof (buf))) > 0) {
|
||||
chprintf(chp, "%s", buf);
|
||||
while ((n = read(fd, buf, sizeof (2048))) > 0) {
|
||||
streamWrite(chp, (const uint8_t *)buf, n);
|
||||
}
|
||||
chprintf(chp, SHELL_NEWLINE_STR);
|
||||
|
||||
(void) close(fd);
|
||||
}
|
||||
|
|
|
@ -170,13 +170,14 @@ static msg_t drv_open_file(void *instance,
|
|||
int oflag,
|
||||
vfs_file_node_c **vfnpp) {
|
||||
vfs_overlay_driver_c *drvp = (vfs_overlay_driver_c *)instance;
|
||||
const char *scanpath = path;
|
||||
msg_t err;
|
||||
|
||||
do {
|
||||
err = vfs_parse_match_separator(&path);
|
||||
err = vfs_parse_match_separator(&scanpath);
|
||||
VFS_BREAK_ON_ERROR(err);
|
||||
|
||||
if (*path == '\0') {
|
||||
if (*scanpath == '\0') {
|
||||
(void)instance;
|
||||
|
||||
/* Always not found, there are no files in the root.*/
|
||||
|
@ -185,11 +186,23 @@ static msg_t drv_open_file(void *instance,
|
|||
else {
|
||||
vfs_driver_c *dp;
|
||||
|
||||
/* Delegating node creation to a registered driver.*/
|
||||
err = match_driver(drvp, &path, &dp);
|
||||
VFS_BREAK_ON_ERROR(err);
|
||||
/* Searching for a match among registered overlays.*/
|
||||
err = match_driver(drvp, &scanpath, &dp);
|
||||
if (err == VFS_RET_SUCCESS) {
|
||||
/* Delegating node creation to a registered driver.*/
|
||||
err = dp->vmt->open_file((void *)dp, scanpath, oflag, vfnpp);
|
||||
}
|
||||
else {
|
||||
/* No matching overlay, the whole path is passed to the overlaid
|
||||
driver, if defined, else returning the previous error.*/
|
||||
if (drvp->overlaid_drv != NULL) {
|
||||
err = drvp->overlaid_drv->vmt->open_file((void *)drvp->overlaid_drv,
|
||||
path,
|
||||
oflag,
|
||||
vfnpp);
|
||||
}
|
||||
}
|
||||
|
||||
err = dp->vmt->open_file((void *)dp, path, oflag, vfnpp);
|
||||
}
|
||||
}
|
||||
while (false);
|
||||
|
|
Loading…
Reference in New Issue