diff options
Diffstat (limited to 'Build/source/texk/dvipdfm-x/mfileio.c')
-rw-r--r-- | Build/source/texk/dvipdfm-x/mfileio.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/Build/source/texk/dvipdfm-x/mfileio.c b/Build/source/texk/dvipdfm-x/mfileio.c index fe3485af462..5a42d105ee7 100644 --- a/Build/source/texk/dvipdfm-x/mfileio.c +++ b/Build/source/texk/dvipdfm-x/mfileio.c @@ -142,4 +142,30 @@ char *mfgets (char *buffer, int length, FILE *file) return buffer; } +/* As each lines may contain null-characters, so outptr here is NOT + * null-terminated string. + * Returns -1 for when EOF is already reached, and -2 if buffer has no + * enough space. + */ +int +mfreadln (char *buf, int size, FILE *fp) +{ + int c; + int len = 0; + + while ((c = fgetc(fp)) != EOF && c != '\n' && c != '\r') { + if (len >= size) { + return -2; + } + buf[len++] = (char) c; + } + if (c == EOF && len == 0) { + return -1; + } + if (c == '\r' && (c = fgetc(fp)) >= 0 && (c != '\n')) + ungetc(c, fp); + + return len; +} + char work_buffer[WORK_BUFFER_SIZE]; |