Index: /src/router/httpd/modules/broadcom.c
===================================================================
--- /src/router/httpd/modules/broadcom.c	(revision 17208)
+++ /src/router/httpd/modules/broadcom.c	(revision 17209)
@@ -1530,9 +1530,10 @@
 {
 	int i;
-	unsigned char *disks[]={"/dev/sda2","/dev/sdb2","/dev/sdc2","/dev/sdd2","/dev/sde2","/dev/sdf2","/dev/sdg2","/dev/sdh2","/dev/sdi2"};
+	static char ret[4];
+	unsigned char *disks[]={"sda2","sdb2","sdc2","sdd2","sde2","sdf2","sdg2","sdh2","sdi2"};
 	for (i = 0; i < 9; i++) {
 		char dev[64];
 
-		strcpy(dev, disks[i]);
+		sprintf(dev, "/dev/%s", disks[i]);
 		FILE *in = fopen(dev, "rb");
 
@@ -1547,5 +1548,6 @@
 			fclose(in);
 			// filesystem detected
-			return disks[i];
+			strncpy(ret,disks[i],3);
+			return ret;
 		}
 		fclose(in);
@@ -1655,5 +1657,5 @@
 #endif
 		char drive[64];
-		strcpy(drive, getdisc());
+		sprintf(drive,"/dev/%s",getdisc());
 		FILE *in = fopen64(drive, "r+b");
 		fseeko64(in, 0, SEEK_END);
Index: /src/router/httpd/modules/upgrade_x86.c
===================================================================
--- /src/router/httpd/modules/upgrade_x86.c	(revision 17208)
+++ /src/router/httpd/modules/upgrade_x86.c	(revision 17209)
@@ -35,9 +35,10 @@
 {
 	int i;
-	unsigned char *disks[]={"/dev/sda2","/dev/sdb2","/dev/sdc2","/dev/sdd2","/dev/sde2","/dev/sdf2","/dev/sdg2","/dev/sdh2","/dev/sdi2"};
+	static char ret[4];
+	unsigned char *disks[]={"sda2","sdb2","sdc2","sdd2","sde2","sdf2","sdg2","sdh2","sdi2"};
 	for (i = 0; i < 9; i++) {
 		char dev[64];
 
-		strcpy(dev, disks[i]);
+		sprintf(dev, "/dev/%s", disks[i]);
 		FILE *in = fopen(dev, "rb");
 
@@ -52,5 +53,6 @@
 			fclose(in);
 			// filesystem detected
-			return disks[i];
+			strncpy(ret,disks[i],3);
+			return ret;
 		}
 		fclose(in);
@@ -212,5 +214,5 @@
 	sprintf(drive, "/dev/sda");
 #else
-	strcpy(drive, getdisc());
+	sprintf(drive, "/dev/%s",getdisc());
 #endif
 	fprintf (stderr, "Write Linux %d to %s\n", linuxsize,dev);
@@ -355,5 +357,5 @@
 	sprintf(drive, "/dev/sda");
 #else
-	strcpy(drive, getdisc());
+	sprintf(drive, "/dev/%s",getdisc());
 #endif
 		FILE *in = fopen(drive, "r+b");
Index: /src/router/services/sysinit/devinit.c
===================================================================
--- /src/router/services/sysinit/devinit.c	(revision 17208)
+++ /src/router/services/sysinit/devinit.c	(revision 17209)
@@ -58,9 +58,10 @@
 {
 	int i;
-	unsigned char *disks[]={"/dev/sda2","/dev/sdb2","/dev/sdc2","/dev/sdd2","/dev/sde2","/dev/sdf2","/dev/sdg2","/dev/sdh2","/dev/sdi2"};
+	static char ret[4];
+	unsigned char *disks[]={"sda2","sdb2","sdc2","sdd2","sde2","sdf2","sdg2","sdh2","sdi2"};
 	for (i = 0; i < 9; i++) {
 		char dev[64];
 
-		strcpy(dev, disks[i]);
+		sprintf(dev, "/dev/%s", disks[i]);
 		FILE *in = fopen(dev, "rb");
 
@@ -75,5 +76,6 @@
 			fclose(in);
 			// filesystem detected
-			return disks[i];
+			strncpy(ret,disks[i],3);
+			return ret;
 		}
 		fclose(in);
@@ -97,25 +99,4 @@
 #endif
 	cprintf("sysinit() tmp\n");
-#ifdef HAVE_X86
-	char dev[64];
-	char *disc = getdisc();
-
-	if (disc == NULL) {
-		fprintf(stderr,
-			"no valid dd-wrt partition found, calling shell");
-		eval("/bin/sh");
-		exit(0);
-	}
-	// sprintf (dev, "/dev/discs/disc%d/part1", index);
-	// mount (dev, "/boot", "ext2", MS_MGC_VAL, NULL);
-
-	sprintf(dev, "/dev/discs/disc%d/part3", index);
-	if (mount(dev, "/usr/local", "ext2", MS_MGC_VAL, NULL)) {
-		eval("/sbin/mke2fs", "-F", "-b", "1024", dev);
-		mount(dev, "/usr/local", "ext2", MS_MGC_VAL, NULL);
-//		eval("/bin/tar", "-xvvjf", "/etc/local.tar.bz2", "-C", "/");
-	}
-	eval("mkdir", "-p", "/usr/local/nvram");
-#endif
 	/*
 	 * /tmp 
@@ -157,4 +138,25 @@
 	system("/etc/hotplug2.startup");
 #endif
+#ifdef HAVE_X86
+	fprintf(stderr,"waiting for hotplug\n");
+	char dev[64];
+	char *disc = getdisc();
+
+	if (disc == NULL) {
+		fprintf(stderr,
+			"no valid dd-wrt partition found, calling shell");
+		eval("/bin/sh");
+	}
+	// sprintf (dev, "/dev/discs/disc%d/part1", index);
+	// mount (dev, "/boot", "ext2", MS_MGC_VAL, NULL);
+
+	sprintf(dev, "/dev/%s3", disc);
+	if (mount(dev, "/usr/local", "ext2", MS_MGC_VAL, NULL)) {
+		eval("/sbin/mke2fs", "-F", "-b", "1024", dev);
+		mount(dev, "/usr/local", "ext2", MS_MGC_VAL, NULL);
+//		eval("/bin/tar", "-xvvjf", "/etc/local.tar.bz2", "-C", "/");
+	}
+	eval("mkdir", "-p", "/usr/local/nvram");
+#endif
 fprintf(stderr,"done\n");
 }
Index: /src/router/services/sysinit/sysinit-x86.c
===================================================================
--- /src/router/services/sysinit/sysinit-x86.c	(revision 17208)
+++ /src/router/services/sysinit/sysinit-x86.c	(revision 17209)
@@ -60,9 +60,10 @@
 {
 	int i;
-	unsigned char *disks[]={"/dev/sda2","/dev/sdb2","/dev/sdc2","/dev/sdd2","/dev/sde2","/dev/sdf2","/dev/sdg2","/dev/sdh2","/dev/sdi2"};
+	static char ret[4];
+	unsigned char *disks[]={"sda2","sdb2","sdc2","sdd2","sde2","sdf2","sdg2","sdh2","sdi2"};
 	for (i = 0; i < 9; i++) {
 		char dev[64];
 
-		strcpy(dev, disks[i]);
+		sprintf(dev, "/dev/%s", disks[i]);
 		FILE *in = fopen(dev, "rb");
 
@@ -77,5 +78,6 @@
 			fclose(in);
 			// filesystem detected
-			return disks[i];
+			strncpy(ret,disks[i],3);
+			return ret;
 		}
 		fclose(in);
@@ -114,4 +116,5 @@
 	if (in == NULL) {
 		fprintf(stderr, "recover broken nvram\n");
+		sprintf(dev,"/dev/%s",disk);
 		strcpy(dev,disk);
 		in = fopen(dev, "rb");
Index: /src/router/services/sysinit/tools/recover.c
===================================================================
--- /src/router/services/sysinit/tools/recover.c	(revision 17208)
+++ /src/router/services/sysinit/tools/recover.c	(revision 17209)
@@ -5,5 +5,5 @@
 	sprintf(drive, "/dev/sda");
 #else
-	strcpy(drive, getdisc());
+	sprintf(drive, "/dev/%s",getdisc());
 #endif
 	//backup nvram
@@ -41,5 +41,5 @@
 	sprintf(dev, "/dev/sda");
 #else
-	strcpy(dev, getdisc());
+	sprintf(dev, "/dev/%s",getdisc());
 #endif
 	in = fopen(dev, "rb");
