# HG changeset patch # User Michael Spacefalcon # Date 1390791585 0 # Node ID c95efd27fb2e48575808f3224b321eb23d22609b # Parent acedd4c88d2e76daca7357e32750730d32ca7408 tiffs catino implemented diff -r acedd4c88d2e -r c95efd27fb2e ffstools/tiffs-rd/cat.c --- a/ffstools/tiffs-rd/cat.c Mon Jan 27 02:32:46 2014 +0000 +++ b/ffstools/tiffs-rd/cat.c Mon Jan 27 02:59:45 2014 +0000 @@ -168,3 +168,66 @@ cat_finish(); exit(0); } + +cmd_catino(argc, argv) + char **argv; +{ + extern int optind; + int c, headino; + struct inode_info *inf; + struct chunkinfo chi; + + optind = 0; + while ((c = getopt(argc, argv, "hv")) != EOF) + switch (c) { + case 'h': + cat_mode = 2; + continue; + case 'v': + cat_mode = 1; + continue; + default: +usage: fprintf(stderr, "usage: catino [-v|-h] ino\n"); + exit(1); + } + if (argc != optind + 1) + goto usage; + headino = strtoul(argv[optind], 0, 16); + + read_ffs_image(); + find_inode_block(); + alloc_inode_table(); + if (!validate_inode(headino)) { + fprintf(stderr, "catino: specified inode number is invalid\n"); + exit(1); + } + inf = inode_info[headino]; + switch (inf->type) { + case 0x00: + case 0xE1: + case 0xF1: + case 0xF3: + break; + case 0xF2: + fprintf(stderr, "error: the requested object is a directory\n"); + exit(1); + default: + fprintf(stderr, "error: unexpected object type %02X\n", + inf->type); + exit(1); + } + if (!inf->len) { + fprintf(stderr, "error: requested inode has been reclaimed\n"); + exit(1); + } + if (!validate_obj_name(headino, 0)) { + fprintf(stderr, +"error: no valid name at the beginning of the requested seghead chunk\n"); + exit(1); + } + size_head_chunk(inf, &chi); + cat_chunk(&chi); + iterate_seg_file(headino, segment_cat_callback, 0L, !inf->type, 0); + cat_finish(); + exit(0); +} diff -r acedd4c88d2e -r c95efd27fb2e ffstools/tiffs-rd/main.c --- a/ffstools/tiffs-rd/main.c Mon Jan 27 02:32:46 2014 +0000 +++ b/ffstools/tiffs-rd/main.c Mon Jan 27 02:59:45 2014 +0000 @@ -55,6 +55,7 @@ extern int cmd_blkhdr(); extern int cmd_cat(); +extern int cmd_catino(); extern int cmd_fsinfo(); extern int cmd_ls(); extern int cmd_lsino(); @@ -65,6 +66,7 @@ } cmdtab[] = { {"blkhdr", cmd_blkhdr}, {"cat", cmd_cat}, + {"catino", cmd_catino}, {"fsck", NULL}, {"fsinfo", cmd_fsinfo}, {"ls", cmd_ls},