FreeCalypso > hg > freecalypso-reveng
diff mpffs/dbgls.c @ 34:95f61c3b430a
mpffs-rdutils: pathname search implemented
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 30 Jun 2013 16:20:28 +0000 |
parents | 660b0ea739f3 |
children | e9c6d6615f32 |
line wrap: on
line diff
--- a/mpffs/dbgls.c Sun Jun 30 07:47:49 2013 +0000 +++ b/mpffs/dbgls.c Sun Jun 30 16:20:28 2013 +0000 @@ -119,9 +119,34 @@ } } +save_pathname_arg(pnarg) + char *pnarg; +{ + if (*pnarg == '/') + pnarg++; + if (strlen(pnarg) + 2 > sizeof workpath) { + fprintf(stderr, + "error: specified pathname is too long (overflows internal buffer)\n"); + exit(1); + } + sprintf(workpath, "/%s", pnarg); +} + +dump_by_pathname(pnarg) + char *pnarg; +{ + struct objinfo obj; + + save_pathname_arg(pnarg); + obj.entryno = find_pathname(pnarg); + get_index_entry(&obj); + validate_chunk(&obj); + dump_object(&obj); +} + usage() { - fprintf(stderr, "usage: mpffs-dbgls [options] ffs-image\n"); + fprintf(stderr, "usage: mpffs-dbgls [options] ffs-image [pathname]\n"); exit(1); } @@ -131,11 +156,16 @@ extern int optind; parse_cmdline_options(argc, argv); - if (argc - optind != 1) + argc -= optind; + argv += optind; + if (argc < 1 || argc > 2) usage(); verbose++; - imgfile = argv[optind]; + imgfile = argv[0]; preliminaries(); - dump_dir(root.descend, 0); + if (argc == 1) + dump_dir(root.descend, 0); + else + dump_by_pathname(argv[1]); exit(0); }