diff --git a/format.c b/format.c index ef96dad..62657a2 100644 --- a/format.c +++ b/format.c @@ -93,18 +93,40 @@ internal_implicit_link_p(FILE *input) return ret; } +void +get_linkname(FILE *input, char *out) +{ + char c; + while ((c = fgetc(input)) != '}') { + if (c == EOF) + die("End of file encountered while parsing link name."); + else if (c == '\n') + c = ' '; + *(out++) = c; + } + *out = '\0'; +} + +void +get_link(FILE *input, char *out) +{ + char c; + while (((c = fgetc(input)) != ' ') && c != '\n') { + if (c == EOF) + die("End of file encountered while parsing link."); + *(out)++ = c; + } + *out = '\0'; +} + void emit_external_link(FILE *input, FILE *output) { - char link[1024] = {0}; - char *link_ptr = link; - while ((*(link_ptr++) = fgetc(input)) != ' '); - *(link_ptr - 1) = '\0'; + char link[1024]; + get_link(input, link); - char linkname[1024] = {0}; - char *linkname_ptr = linkname; - while ((*(linkname_ptr++) = fgetc(input)) != '}'); - *(linkname_ptr - 1) = '\0'; + char linkname[1024]; + get_linkname(input, linkname); fprintf(output, "[%s]", link, linkname); } @@ -114,7 +136,7 @@ emit_internal_implicit_link(FILE *input, FILE *output) { fseek(input, -1, SEEK_CUR); - char page[1024] = {0}; + char page[1024]; char *page_ptr = page; while ((*(page_ptr++) = fgetc(input)) != '}'); @@ -128,16 +150,11 @@ emit_internal_explicit_link(FILE *input, FILE *output) { fseek(input, -1, SEEK_CUR); - char page[1024] = {0}; - char *page_ptr = page; + char page[1024]; + get_link(input, page); - while ((*(page_ptr++) = fgetc(input)) != ' '); - *(page_ptr - 1) = '\0'; - - char linkname[1024] = {0}; - char *linkname_ptr = linkname; - while ((*(linkname_ptr++) = fgetc(input)) != '}'); - *(linkname_ptr - 1) = '\0'; + char linkname[1024]; + get_linkname(input, linkname); fprintf(output, "{%s}", page, linkname); }