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);
 }