scew_bool buffer_end_ (scew_reader *reader) { scew_reader_buffer *buf_reader = NULL; assert (reader != NULL); buf_reader = scew_reader_data (reader); return (buf_reader->current >= buf_reader->size); }
scew_bool file_error_ (scew_reader *reader) { scew_reader_fp *fp_reader = NULL; assert (reader != NULL); fp_reader = scew_reader_data (reader); return (ferror (fp_reader->file) != 0); }
void file_free_ (scew_reader *reader) { scew_reader_fp *fp_reader = NULL; assert (reader != NULL); /* Close the file before freeing the reader. */ file_close_ (reader); fp_reader = scew_reader_data (reader); free (fp_reader); }
void buffer_free_ (scew_reader *reader) { scew_reader_buffer *buf_reader = NULL; assert (reader != NULL); /* Close the buffer before freeing the reader. */ buffer_close_ (reader); buf_reader = scew_reader_data (reader); free (buf_reader); }
scew_bool buffer_close_ (scew_reader *reader) { scew_reader_buffer *buf_reader = NULL; assert (reader != NULL); buf_reader = scew_reader_data (reader); /* This will mark it as EOR. */ buf_reader->current = buf_reader->size; return SCEW_TRUE; }
size_t file_read_ (scew_reader *reader, XML_Char *buffer, size_t char_no) { size_t read_no = 0; scew_reader_fp *fp_reader = NULL; assert (reader != NULL); assert (buffer != NULL); fp_reader = scew_reader_data (reader); read_no = fread (buffer, sizeof (XML_Char), char_no, fp_reader->file); buffer[read_no] = _XT('\0'); return read_no; }
scew_bool file_end_ (scew_reader *reader) { scew_bool closed = SCEW_FALSE; scew_reader_fp *fp_reader = NULL; assert (reader != NULL); fp_reader = scew_reader_data (reader); /* If file is already closed, return true as well. */ closed = fp_reader->closed; if (!closed) { /* Check end of file. */ int end = feof (fp_reader->file); closed = ((-1 == end) || (end != 0)) ? SCEW_TRUE : SCEW_FALSE; } return closed; }
size_t buffer_read_ (scew_reader *reader, XML_Char *buffer, size_t char_no) { size_t read_no = 0; size_t maxlen = 0; scew_reader_buffer *buf_reader = NULL; assert (reader != NULL); assert (buffer != NULL); buf_reader = scew_reader_data (reader); /* Get maximum number of available bytes in buffer. */ maxlen = buf_reader->size - buf_reader->current; read_no = (char_no > maxlen) ? maxlen : char_no; scew_memcpy (buffer, buf_reader->buffer + buf_reader->current, read_no); buf_reader->current += read_no; return read_no; }
scew_bool file_close_ (scew_reader *reader) { int status = 0; scew_reader_fp *fp_reader = NULL; assert (reader != NULL); fp_reader = scew_reader_data (reader); /* Do not close already closed file or standard input stream. */ if (fp_reader->closed || (stdin == fp_reader->file)) { fp_reader->closed = SCEW_TRUE; } else { /* Set closed flag if we are actually able to close it. */ status = fclose (fp_reader->file); fp_reader->closed = (0 == status); } return fp_reader->closed; }