From 6145c2b7fe0b06991ee0748c69e3ebb454959ed9 Mon Sep 17 00:00:00 2001
From: Amin Hassani <ahassani@google.com>
Date: Fri, 11 Aug 2017 11:20:02 -0700
Subject: [PATCH] Generate squashfs image file map using unsquashfs

This CL modifies unsquashfs to generate a file map when given the flag
-m or -map. The structure of the file map is a list of per-line of the
following:

path start compressed_block_size_1 ... compressed_block_size_N

where:
- 'path' is the full path to the file.
- 'start' is the start byte address of the file.
- 'compressed_block_size_i' is a the length of the i'th compressed block
in bytes. If the block is uncompressed its 25th LSB is set.

It also first prints the list of all fragments along with their address
and block sizes at the beginning of the aforementioned list. The path
for each fragment is '<fragment_i>' with 'i' be the i'th fragment.

The usage:
unsquashfs -m(ap) <path_to_file_map> <squashfs_image>
---
 squashfs-tools/unsquashfs.c | 62 ++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 59 insertions(+), 3 deletions(-)

diff --git a/squashfs-tools/unsquashfs.c b/squashfs-tools/unsquashfs.c
index 77c3c07..c3d0c08 100644
--- a/squashfs-tools/unsquashfs.c
+++ b/squashfs-tools/unsquashfs.c
@@ -79,6 +79,9 @@ unsigned int cur_blocks = 0;
 int inode_number = 1;
 int no_xattrs = XATTR_DEF;
 int user_xattrs = FALSE;
+int lsfilemap = FALSE;
+char* file_map_path = NULL;
+FILE* file_map_file = NULL;
 
 int lookup_type[] = {
 	0,
@@ -514,6 +517,15 @@ char *modestr(char *str, int mode)
 	return str;
 }
 
+void print_file_map(char* pathname, long long start, int block_count,
+					unsigned int* block_list)
+{
+	fprintf(file_map_file, "%s %lld", pathname, start);
+	int i;
+	for(i = 0; i < block_count; i++)
+		fprintf(file_map_file, " %u", block_list[i]);
+	fprintf(file_map_file, "\n");
+}
 
 #define TOTALCHARS  25
 int print_filename(char *pathname, struct inode *inode)
@@ -526,7 +538,20 @@ int print_filename(char *pathname, struct inode *inode)
 	struct tm *t;
 
 	if(short_ls) {
-		printf("%s\n", pathname);
+		if(!lsfilemap)
+			printf("%s\n", pathname);
+		else if((SQUASHFS_FILE_TYPE == inode->type ||
+				SQUASHFS_LREG_TYPE == inode->type) &&
+				inode->fragment < 0) {
+			unsigned int* block_list =
+				malloc(inode->blocks * sizeof(unsigned int));
+			if(block_list == NULL)
+				EXIT_UNSQUASH("print_filename: unable to malloc block list\n");
+			s_ops.read_block_list(block_list, inode->block_ptr, inode->blocks);
+			print_file_map(pathname, inode->start, inode->blocks,
+							   block_list);
+			free(block_list);
+		}
 		return 1;
 	}
 
@@ -1545,7 +1570,7 @@ void dir_scan(char *parent_name, unsigned int start_block, unsigned int offset,
 		return;
 	}
 
-	if(lsonly || info)
+	if(!lsfilemap && (lsonly || info))
 		print_filename(parent_name, i);
 
 	if(!lsonly) {
@@ -1604,7 +1629,7 @@ void dir_scan(char *parent_name, unsigned int start_block, unsigned int offset,
 
 			i = s_ops.read_inode(start_block, offset);
 
-			if(lsonly || info)
+			if(lsfilemap || lsonly || info)
 				print_filename(pathname, i);
 
 			if(!lsonly)
@@ -2627,6 +2652,17 @@ int main(int argc, char *argv[])
 		} else if(strcmp(argv[i], "-regex") == 0 ||
 				strcmp(argv[i], "-r") == 0)
 			use_regex = TRUE;
+		else if(strcmp(argv[i], "-map") == 0 ||
+				strcmp(argv[i], "-m") == 0) {
+			if(++i == argc) {
+				fprintf(stderr, "%s: -map missing filename\n",
+					argv[0]);
+				exit(1);
+			}
+			file_map_path = argv[i];
+			lsonly = TRUE;
+			lsfilemap = TRUE;
+		}
 		else
 			goto options;
 	}
@@ -2690,6 +2726,8 @@ options:
 				"regular expressions\n");
 			ERROR("\t\t\t\trather than use the default shell "
 				"wildcard\n\t\t\t\texpansion (globbing)\n");
+			ERROR("\t-m[ap] <file>\tcreates file map"
+				", but doesn't unsquash\n");
 			ERROR("\nDecompressors available:\n");
 			display_compressors("", "");
 		}
@@ -2809,12 +2847,30 @@ options:
 
 	enable_progress_bar();
 
+	if(lsfilemap) {
+		int i, size;
+		long long start;
+		char tmp[20];
+		file_map_file = fopen(file_map_path, "w");
+		if(file_map_file == NULL)
+			EXIT_UNSQUASH("Failed to open file map \"%s\" because %s\n",
+				file_map_path, strerror(errno));
+		for(i = 0; i < sBlk.s.fragments; i++) {
+			s_ops.read_fragment(i, &start, &size);
+			snprintf(tmp, 20, "<fragment-%d>", i);
+			print_file_map(tmp, start, 1, (unsigned int*)&size);
+		}
+	}
+
 	dir_scan(dest, SQUASHFS_INODE_BLK(sBlk.s.root_inode),
 		SQUASHFS_INODE_OFFSET(sBlk.s.root_inode), paths);
 
 	queue_put(to_writer, NULL);
 	queue_get(from_writer);
 
+	if(lsfilemap)
+		fclose(file_map_file);
+
 	disable_progress_bar();
 
 	if(!lsonly) {
-- 
2.14.1.480.gb18f417b89-goog

