int16_t parse_cmd_fs_list (char *cmd, char *output, uint16_t len) { char name[FS_FILENAME + 1]; if (cmd[0] != 0x05) { /* first function entry */ cmd[0] = 0x05; /* set magic byte ... */ cmd[1] = 0x00; return ECMD_AGAIN(snprintf_P(output, len, PSTR("name :inode :size\n" "----------------------"))); } else { if (fs_list (&fs, NULL, name, cmd[1] ++) != FS_OK) return ECMD_FINAL_OK; /* no repare, out. */ name[FS_FILENAME] = 0; fs_inode_t inode = fs_get_inode (&fs, name); fs_size_t size = fs_size (&fs, inode); return ECMD_AGAIN(snprintf_P(output, len, PSTR("%-6s:0x%04x:0x%04x"), name, inode, size)); } }
int main(int argc, char **argv) { char *name, *path, list[1000]; size_t i, l = 0; uint64_t dir; if (argc == 1) { path = (char*) getenv("PWD"); } else { path = argv[1]; } dir = fs_find(0, path); if (!dir) { fprintf(stderr, "%s: ", path_simplify(path)); perror(NULL); abort(); } list[0] = '\0'; for (i = 0;; i++) { name = fs_list(dir, i); if (name) { strlcat(list, name, 1000); l += 8 * ((strlen(name) / 8) + 1); if (l > 48) { strlcat(list, "\n", 1000); l = 0; } else { strlcat(list, "\t", 1000); } free(name); } else { if (errno == ENOTDIR) { fprintf(stderr, "%s: ", path); perror(NULL); abort(); } printf("%s", list); if (l) printf("\n"); return EXIT_SUCCESS; } } return 0; }
void ls_command(int n, char *argv[]){ fio_printf(1, "\r\n"); fs_list("/romfs/"); }