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