From 2ab14de54759e00f1e7fe919c986c5e6a3b823b6 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Sat, 25 Mar 2006 14:31:42 +0000
Subject: [PATCH] fix gcc4-related bug in switch-robo

SVN-Revision: 3483
---
 openwrt/target/linux/package/switch/src/switch-core.c | 7 -------
 openwrt/target/linux/package/switch/src/switch-core.h | 8 ++++++++
 openwrt/target/linux/package/switch/src/switch-robo.c | 9 ++++++---
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/openwrt/target/linux/package/switch/src/switch-core.c b/openwrt/target/linux/package/switch/src/switch-core.c
index 8216646370..6b59b9ba24 100644
--- a/openwrt/target/linux/package/switch/src/switch-core.c
+++ b/openwrt/target/linux/package/switch/src/switch-core.c
@@ -68,13 +68,6 @@ static struct file_operations switch_proc_fops = {
 	write: switch_proc_write
 };
 
-static inline char *strdup(char *str)
-{
-	char *new = kmalloc(strlen(str) + 1, GFP_KERNEL);
-	strcpy(new, str);
-	return new;
-}
-
 static ssize_t switch_proc_read(struct file *file, char *buf, size_t count, loff_t *ppos)
 {
 #ifdef LINUX_2_4
diff --git a/openwrt/target/linux/package/switch/src/switch-core.h b/openwrt/target/linux/package/switch/src/switch-core.h
index a6621eed22..5292469c01 100644
--- a/openwrt/target/linux/package/switch/src/switch-core.h
+++ b/openwrt/target/linux/package/switch/src/switch-core.h
@@ -48,4 +48,12 @@ extern switch_vlan_config *switch_parse_vlan(switch_driver *driver, char *buf);
 extern int switch_parse_media(char *buf);
 extern int switch_print_media(char *buf, int media);
 
+static inline char *strdup(char *str)
+{
+	char *new = kmalloc(strlen(str) + 1, GFP_KERNEL);
+	strcpy(new, str);
+	return new;
+}
+
+
 #endif
diff --git a/openwrt/target/linux/package/switch/src/switch-robo.c b/openwrt/target/linux/package/switch/src/switch-robo.c
index 7e4c4de296..b23fca6442 100644
--- a/openwrt/target/linux/package/switch/src/switch-robo.c
+++ b/openwrt/target/linux/package/switch/src/switch-robo.c
@@ -51,6 +51,7 @@
 #define SIOCGETCPHYRD           (SIOCDEVPRIVATE + 9)
 #define SIOCSETCPHYWR           (SIOCDEVPRIVATE + 10)
 
+static char *device;
 static int use_et = 0;
 static int is_5350 = 0;
 static struct ifreq ifr;
@@ -425,17 +426,18 @@ static int handle_reset(void *driver, char *buf, int nr)
 
 static int __init robo_init()
 {
-	char *device = "ethX";
 	int notfound = 1;
 
+	device = strdup("ethX");
 	for (device[3] = '0'; (device[3] <= '3') && notfound; device[3]++) {
 		notfound = robo_probe(device);
 	}
 	device[3]--;
 	
-	if (notfound)
+	if (notfound) {
+		kfree(device);
 		return -ENODEV;
-	else {
+	} else {
 		switch_config cfg[] = {
 			{"enable", handle_enable_read, handle_enable_write},
 			{"enable_vlan", handle_enable_vlan_read, handle_enable_vlan_write},
@@ -465,6 +467,7 @@ static int __init robo_init()
 static void __exit robo_exit()
 {
 	switch_unregister_driver(DRIVER_NAME);
+	kfree(device);
 }
 
 
-- 
2.30.2