Ver código fonte

qvm-copy-to-vm: show last processed filename on error

Marek Marczykowski-Górecki 10 anos atrás
pai
commit
c939cc049e
1 arquivos alterados com 25 adições e 4 exclusões
  1. 25 4
      qubes-rpc/qfile-agent.c

+ 25 - 4
qubes-rpc/qfile-agent.c

@@ -53,6 +53,9 @@ void do_notify_progress(long long total, int flag)
 void wait_for_result()
 {
 	struct result_header hdr;
+	struct result_header_ext hdr_ext;
+	char last_filename[MAX_PATH_LENGTH + 1];
+	char last_filename_prefix[] = "; Last file: ";
 
 	if (!read_all(0, &hdr, sizeof(hdr))) {
 		if (errno == EAGAIN) {
@@ -63,17 +66,35 @@ void wait_for_result()
 			exit(1);	// hopefully remote has produced error message
 		}
 	}
+	if (!read_all(0, &hdr_ext, sizeof(hdr_ext))) {
+		// remote used old result_header struct
+		hdr_ext.last_namelen = 0;
+	}
+	if (hdr_ext.last_namelen > MAX_PATH_LENGTH) {
+		// read only at most MAX_PATH_LENGTH chars
+		hdr_ext.last_namelen = MAX_PATH_LENGTH;
+	}
+	if (!read_all(0, last_filename, hdr_ext.last_namelen)) {
+		fprintf(stderr, "Failed to get last filename\n");
+		hdr_ext.last_namelen = 0;
+	}
+	last_filename[hdr_ext.last_namelen] = '\0';
+	if (!hdr_ext.last_namelen)
+		/* set prefix to empty string */
+		last_filename_prefix[0] = '\0';
+
+	errno = hdr.error_code;
 	if (hdr.error_code != 0) {
 		switch (hdr.error_code) {
 			case EEXIST:
-				gui_fatal("File copy: not overwriting existing file. Clean QubesIncoming dir, and retry copy");
+				gui_fatal("File copy: not overwriting existing file. Clean QubesIncoming dir, and retry copy%s%s", last_filename_prefix, last_filename);
 				break;
 			case EINVAL:
-				gui_fatal("File copy: Corrupted data from packer");
+				gui_fatal("File copy: Corrupted data from packer%s%s", last_filename_prefix, last_filename);
 				break;
 			default:
-				gui_fatal("File copy: %s",
-						strerror(hdr.error_code));
+				gui_fatal("File copy: %s%s%s",
+						strerror(hdr.error_code), last_filename_prefix, last_filename);
 		}
 	}
 	if (hdr.crc32 != crc32_sum) {