--- np2/common/textfile.c 2003/11/07 18:31:24 1.2 +++ np2/common/textfile.c 2004/06/20 11:19:45 1.3 @@ -3,6 +3,26 @@ #include "textfile.h" +static BOOL getnextstrings(TEXTFILEH fh) { + + UINT rsize; + + if (!fh) { + return(FAILURE); + } + if (file_seek((FILEH)fh->fh, fh->fhpos, 0) != fh->fhpos) { + return(FAILURE); + } + rsize = file_read((FILEH)fh->fh, fh + 1, fh->buffersize); + if (rsize == (UINT)-1) { + return(FAILURE); + } + fh->fhpos += rsize; + fh->pos = 0; + fh->remain = rsize; + return(SUCCESS); +} + TEXTFILEH textfile_open(const char *filename, UINT buffersize) { FILEH fh; @@ -12,20 +32,38 @@ TEXTFILEH textfile_open(const char *file buffersize = 256; } fh = file_open(filename); - if (fh != FILEH_INVALID) { - ret = (TEXTFILEH)_MALLOC(sizeof(_TEXTFILE) + buffersize, filename); - if (ret) { - ZeroMemory(ret, sizeof(_TEXTFILE) + buffersize); - ret->fh = (long)fh; - ret->buffersize = buffersize; - return(ret); + if (fh == FILEH_INVALID) { + goto tfo_err1; + } + ret = (TEXTFILEH)_MALLOC(sizeof(_TEXTFILE) + buffersize, filename); + if (ret == NULL) { + goto tfo_err2; + } + ZeroMemory(ret, sizeof(_TEXTFILE) + buffersize); + ret->fh = (long)fh; + ret->buffersize = buffersize; +#if defined(OSLANG_UTF8) + getnextstrings(ret); + if (ret->remain >= 3) { + char *ptr; + ptr = ((char *)(ret + 1)) + ret->pos; + if ((ptr[0] == (char)0xef) && + (ptr[1] == (char)0xbb) && + (ptr[2] == (char)0xbf)) { + ret->pos += 3; + ret->remain -= 3; } - file_close(fh); } +#endif + return(ret); + +tfo_err2: + file_close(fh); + +tfo_err1: return(NULL); } - void textfile_close(TEXTFILEH fh) { if (fh) { @@ -34,28 +72,6 @@ void textfile_close(TEXTFILEH fh) { } } - -static BOOL getnextstring(TEXTFILEH fh) { - - UINT rsize; - - if (!fh) { - return(FAILURE); - } - if (file_seek((FILEH)fh->fh, fh->fhpos, 0) != fh->fhpos) { - return(FAILURE); - } - rsize = file_read((FILEH)fh->fh, fh + 1, fh->buffersize); - if (rsize == (UINT)-1) { - return(FAILURE); - } - fh->fhpos += rsize; - fh->pos = 0; - fh->remain = rsize; - return(SUCCESS); -} - - BOOL textfile_read(TEXTFILEH fh, char *buffer, UINT size) { char c = '\0'; @@ -67,7 +83,7 @@ BOOL textfile_read(TEXTFILEH fh, char *b size--; crlf = FALSE; do { - if ((!fh->remain) && (getnextstring(fh))) { + if ((!fh->remain) && (getnextstrings(fh))) { return(FAILURE); } if (!fh->remain) { @@ -100,7 +116,7 @@ BOOL textfile_read(TEXTFILEH fh, char *b } } while(!crlf); if ((crlf) && (c == 0x0d)) { - if ((!fh->remain) && (getnextstring(fh))) { + if ((!fh->remain) && (getnextstrings(fh))) { return(FAILURE); } if (fh->remain) {