Lines 200-227
Link Here
|
200 |
|
203 |
|
201 |
static char *get_name(char *name, char *p) |
204 |
static char *get_name(char *name, char *p) |
202 |
{ |
205 |
{ |
203 |
while (isspace(*p)) |
206 |
/* Extract <name>[:<alias>] from nul-terminated p where p matches |
204 |
p++; |
207 |
<name>[:<alias>]: after leading whitespace. |
205 |
while (*p) { |
208 |
If match is not made, set name empty and return unchanged p */ |
206 |
if (isspace(*p)) |
209 |
int namestart=0, nameend=0, aliasend; |
207 |
break; |
210 |
while (isspace(p[namestart])) |
208 |
if (*p == ':') { /* could be an alias */ |
211 |
namestart++; |
209 |
char *dot = p, *dotname = name; |
212 |
nameend=namestart; |
210 |
*name++ = *p++; |
213 |
while (p[nameend] && p[nameend]!=':' && !isspace(p[nameend])) |
211 |
while (isdigit(*p)) |
214 |
nameend++; |
212 |
*name++ = *p++; |
215 |
if (p[nameend]==':') { |
213 |
if (*p != ':') { /* it wasn't, backup */ |
216 |
aliasend=nameend+1; |
214 |
p = dot; |
217 |
while (p[aliasend] && isdigit(p[aliasend])) |
215 |
name = dotname; |
218 |
aliasend++; |
216 |
} |
219 |
if (p[aliasend]==':') { |
217 |
if (*p == '\0') |
220 |
nameend=aliasend; |
218 |
return NULL; |
221 |
} |
219 |
p++; |
222 |
if ((nameend-namestart)<IFNAMSIZ) { |
220 |
break; |
223 |
memcpy(name,&p[namestart],nameend-namestart); |
221 |
} |
224 |
name[nameend-namestart]='\0'; |
222 |
*name++ = *p++; |
225 |
p=&p[nameend+1]; |
|
|
226 |
} else { |
227 |
/* Interface name too large */ |
228 |
name[0]='\0'; |
229 |
} |
230 |
} else { |
231 |
/* first ':' not found - return empty */ |
232 |
name[0]='\0'; |
223 |
} |
233 |
} |
224 |
*name++ = '\0'; |
|
|
225 |
return p; |
234 |
return p; |
226 |
} |
235 |
} |
227 |
|
236 |
|