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);
|