--- ./misc/readcd.c.orig	2011-03-29 16:35:37.100531607 +0530
+++ ./misc/readcd.c	2011-03-30 14:48:39.508342201 +0530
@@ -955,8 +955,12 @@
 	read_capacity(scgp);
 	end = scgp->cap->c_baddr + 1;
 
-	if (end <= 0)
-		end = 10000000;	/* Hack to write empty disks */
+	if (end <= 1)  {
+		scgp->cap->c_baddr = 2236703;
+		end = scgp->cap->c_baddr + 1;   /* Hack that is 4.5GB */
+/*		end = 10000000;	* Hack to write empty disks */
+ 	}
+
 
 	if (parmp) {
 		if (parmp->name)
@@ -966,6 +970,7 @@
 					scgp->scsibus, scgp->target, scgp->lun);
 
 		addr = start = parmp->start;
+	
 		if (parmp->end != -1 && parmp->end < end)
 			end = parmp->end;
 		cnt = Sbufsize / scgp->cap->c_bsize;
@@ -1011,6 +1016,7 @@
 	}
 #endif
 
+
 	for(;addr < end; addr += cnt) {
 
 		if ((addr + cnt) > end)
@@ -1020,6 +1026,8 @@
 
 		if ((amt = fileread(f, Sbuf, cnt * scgp->cap->c_bsize)) < 0)
 			comerr("Cannot read '%s'\n", filename);
+		if (amt > end)  /* Added to stop writing to, too small of disc */
+			comerrno(EX_BAD, "Not a valid sector range \n");
 		if (amt == 0)
 			break;
 		if ((amt / scgp->cap->c_bsize) < cnt)
@@ -1028,6 +1036,12 @@
 			comerrno(scgp->scmd->ux_errno,
 					"Cannot write destination disk\n");
 	}
+	
+    /*Adding Synch Cache to ensure data is committed to the disc*/
+    if (scsi_flush_cache(scgp) < 0)
+        comerrno(scgp->scmd->ux_errno,
+                    "Cannot write destination disk\n");
+
 	error("addr: %8d\n", addr);
 	msec = prstats();
 	error("Wrote %.2f kB at %.1f kB/sec.\n",
