From 9b95085363e65abae7c6044d9852150fa9c8cf4c Mon Sep 17 00:00:00 2001
From: notaz <notasas@gmail.com>
Date: Mon, 30 Mar 2009 21:31:57 +0000
Subject: [PATCH] add padding, bump ver

---
 mx/linux/mx_flasher.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/mx/linux/mx_flasher.c b/mx/linux/mx_flasher.c
index e831d3c..9cb5e3c 100644
--- a/mx/linux/mx_flasher.c
+++ b/mx/linux/mx_flasher.c
@@ -45,7 +45,7 @@ static const struct {
 	{ 0x03eb, 0x202d, "32MX+UF Game Device" },
 };
 
-#define VERSION			"0.9"
+#define VERSION			"0.91"
 
 #define IO_BLK_SIZE		0x2000	/* 8K */
 #define IO_RAM_BLK_SIZE		256
@@ -490,7 +490,7 @@ static int read_write_rom(struct usb_dev_handle *dev, u32 addr, void *buffer, in
 		print_progress(total_bytes, total_bytes);
 	}
 
-	if (count & 1)
+	if ((count & 1) && !is_write)
 		/* work around rw_dev_block() limitation 3 (works for reads only?) */
 		rw_dev_block(dev, 0, dummy, sizeof(dummy), 0);
 
@@ -1013,6 +1013,19 @@ breakloop:
 		if (ret < 0)
 			return 1;
 
+		/* align size to 64 */
+		ret = (w_fsize + 63) & ~63;
+		if (w_fsize != ret) {
+			printf("ROM image size is %d, padding to %d\n", w_fsize, ret);
+			w_fdata = realloc(w_fdata, ret);
+			if (w_fdata == NULL) {
+				fprintf(stderr, "low mem\n");
+				return 1;
+			}
+			memset((char *)w_fdata + w_fsize, 0, ret - w_fsize);
+			w_fsize = ret;
+		}
+
 		if (do_erase_size < w_fsize)
 			do_erase_size = w_fsize;
 	}
-- 
2.39.5