Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/config/main.c
Show First 20 Lines • Show All 335 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
* get_word | * get_word | ||||
* returns EOF on end of file | * returns EOF on end of file | ||||
* NULL on end of line | * NULL on end of line | ||||
* pointer to the word otherwise | * pointer to the word otherwise | ||||
*/ | */ | ||||
char * | char * | ||||
get_word(FILE *fp) | get_word(FILE *fp, const char *keywords) | ||||
{ | { | ||||
int ch; | int ch; | ||||
int escaped_nl = 0; | int escaped_nl = 0; | ||||
init_line_buf(); | init_line_buf(); | ||||
begin: | begin: | ||||
while ((ch = getc(fp)) != EOF) | while ((ch = getc(fp)) != EOF) | ||||
if (ch != ' ' && ch != '\t') | if (ch != ' ' && ch != '\t') | ||||
break; | break; | ||||
if (ch == EOF) | if (ch == EOF) | ||||
return ((char *)EOF); | return ((char *)EOF); | ||||
if (ch == '\\'){ | if (ch == '\\'){ | ||||
escaped_nl = 1; | escaped_nl = 1; | ||||
goto begin; | goto begin; | ||||
} | } | ||||
if (ch == '\n') { | if (ch == '\n') { | ||||
if (escaped_nl){ | if (escaped_nl){ | ||||
escaped_nl = 0; | escaped_nl = 0; | ||||
goto begin; | goto begin; | ||||
} | } | ||||
else | else | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
sbuf_putc(line_buf, ch); | sbuf_putc(line_buf, ch); | ||||
/* Negation operator is a word by itself. */ | |||||
if (ch == '!') { | if (keywords != NULL && strchr(keywords, ch) != NULL) | ||||
return get_line_buf(); | return get_line_buf(); | ||||
} | |||||
while ((ch = getc(fp)) != EOF) { | while ((ch = getc(fp)) != EOF) { | ||||
if (isspace(ch)) | if (isspace(ch) || | ||||
(keywords != NULL && strchr(keywords, ch) != NULL)) | |||||
break; | break; | ||||
sbuf_putc(line_buf, ch); | sbuf_putc(line_buf, ch); | ||||
} | } | ||||
if (ch == EOF) | if (ch == EOF) | ||||
return ((char *)EOF); | return ((char *)EOF); | ||||
(void) ungetc(ch, fp); | (void) ungetc(ch, fp); | ||||
return (get_line_buf()); | return (get_line_buf()); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 433 Lines • Show Last 20 Lines |