diff options
Diffstat (limited to 'difftool')
| -rw-r--r-- | difftool/compare_files.c | 72 | ||||
| -rw-r--r-- | difftool/difftool.h | 12 | ||||
| -rw-r--r-- | difftool/extract.c | 10 | ||||
| -rw-r--r-- | difftool/sqfsdiff.c | 36 | 
4 files changed, 66 insertions, 64 deletions
| diff --git a/difftool/compare_files.c b/difftool/compare_files.c index 89c5f5c..04749c3 100644 --- a/difftool/compare_files.c +++ b/difftool/compare_files.c @@ -6,90 +6,92 @@   */  #include "difftool.h" -static unsigned char a_buf[MAX_WINDOW_SIZE]; -static unsigned char b_buf[MAX_WINDOW_SIZE]; +static unsigned char old_buf[MAX_WINDOW_SIZE]; +static unsigned char new_buf[MAX_WINDOW_SIZE]; -int compare_files(file_info_t *a, file_info_t *b, const char *path) +int compare_files(file_info_t *old, file_info_t *new, const char *path)  { -	char second_name[strlen(second_path) + strlen(path) + 2]; -	char first_name[strlen(first_path) + strlen(path) + 2]; -	int afd = -1, bfd = -1, status = 0; +	char new_name[strlen(new_path) + strlen(path) + 2]; +	char old_name[strlen(old_path) + strlen(path) + 2]; +	int old_fd = -1, new_fd = -1, status = 0;  	uint64_t offset, diff;  	ssize_t ret; -	if (a->size != b->size) +	if (old->size != new->size)  		goto out_different;  	if (compare_flags & COMPARE_NO_CONTENTS)  		return 0; -	if (a_is_dir) { -		sprintf(first_name, "%s/%s", first_path, path); +	if (old_is_dir) { +		sprintf(old_name, "%s/%s", old_path, path); -		afd = open(first_name, O_RDONLY); -		if (afd < 0) { -			perror(first_name); +		old_fd = open(old_name, O_RDONLY); +		if (old_fd < 0) { +			perror(old_name);  			goto fail;  		}  	} -	if (b_is_dir) { -		sprintf(second_name, "%s/%s", second_path, path); +	if (new_is_dir) { +		sprintf(new_name, "%s/%s", new_path, path); -		bfd = open(second_name, O_RDONLY); -		if (bfd < 0) { -			perror(second_name); +		new_fd = open(new_name, O_RDONLY); +		if (new_fd < 0) { +			perror(new_name);  			goto fail;  		}  	} -	for (offset = 0; offset < a->size; offset += diff) { -		diff = a->size - offset; +	for (offset = 0; offset < old->size; offset += diff) { +		diff = old->size - offset;  		if (diff > MAX_WINDOW_SIZE)  			diff = MAX_WINDOW_SIZE; -		if (a_is_dir) { -			if (read_data_at(first_name, offset, afd, a_buf, diff)) +		if (old_is_dir) { +			if (read_data_at(old_name, offset, old_fd, +					 old_buf, diff))  				goto out;  		} else { -			ret = data_reader_read(sqfs_a.data, a, offset, -					       a_buf, diff); +			ret = data_reader_read(sqfs_old.data, old, offset, +					       old_buf, diff);  			if (ret < 0 || (size_t)ret < diff) {  				fprintf(stderr, "Failed to read %s from %s\n", -					path, first_path); +					path, old_path);  				return -1;  			}  		} -		if (b_is_dir) { -			if (read_data_at(second_name, offset, bfd, b_buf, diff)) +		if (new_is_dir) { +			if (read_data_at(new_name, offset, new_fd, +					 new_buf, diff))  				goto out;  		} else { -			ret = data_reader_read(sqfs_b.data, b, offset, -					       b_buf, diff); +			ret = data_reader_read(sqfs_new.data, new, offset, +					       new_buf, diff);  			if (ret < 0 || (size_t)ret < diff) {  				fprintf(stderr, "Failed to read %s from %s\n", -					path, second_path); +					path, new_path);  				return -1;  			}  		} -		if (memcmp(a_buf, b_buf, diff) != 0) +		if (memcmp(old_buf, new_buf, diff) != 0)  			goto out_different;  	}  out: -	if (afd >= 0) -		close(afd); -	if (bfd >= 0) -		close(bfd); +	if (old_fd >= 0) +		close(old_fd); +	if (new_fd >= 0) +		close(new_fd);  	return status;  fail:  	status = -1;  	goto out;  out_different:  	if (compare_flags & COMPARE_EXTRACT_FILES) { -		if (extract_files(a, b, path)) +		if (extract_files(old, new, path))  			goto fail;  	}  	status = 1; diff --git a/difftool/difftool.h b/difftool/difftool.h index 56f727a..bf63faf 100644 --- a/difftool/difftool.h +++ b/difftool/difftool.h @@ -23,13 +23,13 @@  #define MAX_WINDOW_SIZE (1024 * 1024 * 4) -extern const char *first_path; -extern const char *second_path; +extern const char *old_path; +extern const char *new_path;  extern int compare_flags; -extern sqfs_reader_t sqfs_a; -extern sqfs_reader_t sqfs_b; -extern bool a_is_dir; -extern bool b_is_dir; +extern sqfs_reader_t sqfs_old; +extern sqfs_reader_t sqfs_new; +extern bool old_is_dir; +extern bool new_is_dir;  enum {  	COMPARE_NO_PERM = 0x01, diff --git a/difftool/extract.c b/difftool/extract.c index 9fee46d..7d4fc1c 100644 --- a/difftool/extract.c +++ b/difftool/extract.c @@ -37,15 +37,15 @@ static int extract(data_reader_t *data, file_info_t *fi,  	return 0;  } -int extract_files(file_info_t *a, file_info_t *b, const char *path) +int extract_files(file_info_t *old, file_info_t *new, const char *path)  { -	if (a != NULL && !a_is_dir) { -		if (extract(sqfs_a.data, a, path, 'a')) +	if (old != NULL && !old_is_dir) { +		if (extract(sqfs_old.data, old, path, 'a'))  			return -1;  	} -	if (b != NULL && !b_is_dir) { -		if (extract(sqfs_b.data, b, path, 'b')) +	if (new != NULL && !new_is_dir) { +		if (extract(sqfs_new.data, new, path, 'b'))  			return -1;  	}  	return 0; diff --git a/difftool/sqfsdiff.c b/difftool/sqfsdiff.c index 9197430..a065a8f 100644 --- a/difftool/sqfsdiff.c +++ b/difftool/sqfsdiff.c @@ -61,12 +61,12 @@ static const char *usagestr =  "\n";  int compare_flags = 0; -const char *first_path; -const char *second_path; -sqfs_reader_t sqfs_a; -sqfs_reader_t sqfs_b; -bool a_is_dir; -bool b_is_dir; +const char *old_path; +const char *new_path; +sqfs_reader_t sqfs_old; +sqfs_reader_t sqfs_new; +bool old_is_dir; +bool new_is_dir;  static bool compare_super = false;  static const char *extract_dir; @@ -81,10 +81,10 @@ static void process_options(int argc, char **argv)  		switch (i) {  		case 'a': -			first_path = optarg; +			old_path = optarg;  			break;  		case 'b': -			second_path = optarg; +			new_path = optarg;  			break;  		case 'O':  			compare_flags |= COMPARE_NO_OWNER; @@ -119,12 +119,12 @@ static void process_options(int argc, char **argv)  		}  	} -	if (first_path == NULL) { +	if (old_path == NULL) {  		fputs("Missing arguments: first filesystem\n", stderr);  		goto fail_arg;  	} -	if (second_path == NULL) { +	if (new_path == NULL) {  		fputs("Missing arguments: second filesystem\n", stderr);  		goto fail_arg;  	} @@ -150,12 +150,12 @@ int main(int argc, char **argv)  			return EXIT_FAILURE;  	} -	if (sqfs_reader_open(&sqfs_a, first_path, 0)) +	if (sqfs_reader_open(&sqfs_old, old_path, 0))  		return 2; -	if (sqfs_reader_open(&sqfs_b, second_path, 0)) { +	if (sqfs_reader_open(&sqfs_new, new_path, 0)) {  		status = 2; -		goto out_sqfs_a; +		goto out_sqfs_old;  	}  	if (extract_dir != NULL) { @@ -166,12 +166,12 @@ int main(int argc, char **argv)  		}  	} -	ret = node_compare(sqfs_a.fs.root, sqfs_b.fs.root); +	ret = node_compare(sqfs_old.fs.root, sqfs_new.fs.root);  	if (ret != 0)  		goto out;  	if (compare_super) { -		ret = compare_super_blocks(&sqfs_a.super, &sqfs_b.super); +		ret = compare_super_blocks(&sqfs_old.super, &sqfs_new.super);  		if (ret != 0)  			goto out;  	} @@ -183,8 +183,8 @@ out:  	} else {  		status = 0;  	} -	sqfs_reader_close(&sqfs_b); -out_sqfs_a: -	sqfs_reader_close(&sqfs_a); +	sqfs_reader_close(&sqfs_new); +out_sqfs_old: +	sqfs_reader_close(&sqfs_old);  	return status;  } | 
