about summary refs log tree commit diff
path: root/debian/patches/10-interface_parser_fixes.patch
blob: e751e3594b2e04a69c47797de28c250b04d9116c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Index: src/backends/interface_parser.c
===================================================================
RCS file: /cvs/gnome/NetworkManager/src/backends/interface_parser.c,v
retrieving revision 1.6
diff -u -3 -p -r1.6 interface_parser.c
--- src/backends/interface_parser.c	24 Oct 2005 15:04:28 -0000	1.6
+++ src/backends/interface_parser.c	9 May 2006 23:06:35 -0000
@@ -50,6 +50,10 @@ void add_block(const char *type, const c
 
 void add_data(const char *key,const char *data)
 {
+	// Check if there is a block where we can attach our data
+	if (first == NULL)
+		return;
+			
 	if_data *ret = (if_data*)calloc(1,sizeof(struct _if_data));
 	ret->key = g_strdup(key);
 	ret->data = g_strdup(data);
@@ -73,6 +77,10 @@ void ifparser_init(void)
 {
 	FILE *inp = fopen(INTERFACES,"r");
 	int ret = 0;
+	char *line;
+	char *space;
+	char rline[255];
+
 	if (inp == NULL)
 	{
 		nm_warning ("Error: Can't open %s\n",INTERFACES);
@@ -81,10 +89,16 @@ void ifparser_init(void)
 	first = last = NULL;
 	while(1)
 	{
-		char *line,rline[255],*space;
+		line = space = NULL;
 		ret = fscanf(inp,"%255[^\n]\n",rline);
 		if (ret == EOF)
 			break;
+		// If the line did not match, skip it
+		if (ret == 0) {
+			fgets(rline, 255, inp);
+			continue;
+		}
+		
 		line = rline;
 		while(line[0] == ' ')
 			line++;
@@ -94,18 +108,19 @@ void ifparser_init(void)
 		SPACE_OR_TAB(line,space)
 		if (space == NULL)
 		{
-            nm_warning ("Error: Can't parse interface line '%s'\n",line);
+			nm_warning ("Error: Can't parse interface line '%s'\n",line);
 			continue;
 		}
 		space[0] = '\0';
 		
-		
+		// There are four different stanzas:
+		// iface, mapping, auto and allow-*. Create a block for each of them.
 		if (strcmp(line,"iface")==0)
 		{
 			char *space2 = strchr(space+1,' ');
 			if (space2 == NULL)
 			{
-            	nm_warning ("Error: Can't parse iface line '%s'\n",space+1);
+				nm_warning ("Error: Can't parse iface line '%s'\n",space+1);
 				continue;
 			}
 			space2[0]='\0';
@@ -116,7 +131,7 @@ void ifparser_init(void)
 				space = strchr(space2+1,' ');
 				if (space == NULL)
 				{
-            		nm_warning ("Error: Can't parse data '%s'\n",space2+1);
+					nm_warning ("Error: Can't parse data '%s'\n",space2+1);
 					continue;
 				}
 				space[0] = '\0';
@@ -124,6 +139,10 @@ void ifparser_init(void)
 			}
 		}
 		else if (strcmp(line,"auto")==0)
+			add_block(line,space+1);
+		else if (strcmp(line,"mapping")==0)
+			add_block(line,space+1);
+		else if (strncmp(line,"allow-",6)==0)
 			add_block(line,space+1);
 		else
 			add_data(line,space+1);