From 654bed411d93d444323ed2de6ec364ddf5118527 Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Sun, 9 May 2004 18:25:28 +0000 Subject: [PATCH] Added support for MacOS file format (\r used as return character). git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1362 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/src/lib/bsys.c | 27 +++++++++++++++++++-------- bacula/src/lib/lex.c | 2 +- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/bacula/src/lib/bsys.c b/bacula/src/lib/bsys.c index 1c0f40d7f4..b86ad53bf0 100644 --- a/bacula/src/lib/bsys.c +++ b/bacula/src/lib/bsys.c @@ -547,20 +547,31 @@ char *bfgets(char *s, int size, FILE *fd) *p = 0; for (int i=0; i < size-1; i++) { do { - errno = 0; - ch = fgetc(fd); + errno = 0; + ch = fgetc(fd); } while (ch == -1 && (errno == EINTR || errno == EAGAIN)); if (ch == -1) { - if (i == 0) { - return NULL; - } else { - return s; - } + if (i == 0) { + return NULL; + } else { + return s; + } } *p++ = ch; *p = 0; + if (ch == '\r') { /* Support for Mac/Windows file format */ + ch = fgetc(fd); + if (ch == '\n') { /* Windows (\r\n) */ + *p++ = ch; + *p = 0; + } + else { /* Mac (\r only) */ + ungetc(ch, fd); /* Push next character back to fd */ + } + break; + } if (ch == '\n') { - break; + break; } } return s; diff --git a/bacula/src/lib/lex.c b/bacula/src/lib/lex.c index 0a85a3f57a..ead6a9ebdf 100644 --- a/bacula/src/lib/lex.c +++ b/bacula/src/lib/lex.c @@ -158,7 +158,7 @@ int lex_get_char(LEX *lf) Emsg0(M_ABORT, 0, "get_char: called after EOF\n"); } if (lf->ch == L_EOL) { - if (fgets(lf->line, MAXSTRING, lf->fd) == NULL) { + if (bfgets(lf->line, MAXSTRING, lf->fd) == NULL) { lf->ch = L_EOF; if (lf->next) { lex_close_file(lf); -- 2.39.2