123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #include "it-reader.h"
- #include "init.h"
- namespace aFunit {
- size_t StringReader::readText(char *dest, size_t read_len, ReadMode &mode) {
- if (index == len) // 读取到末尾
- return 0;
- if (index + read_len > len) { // 超出长度范围
- read_len = len - index;
- mode = read_mode_finished;
- }
- memcpy(dest, str.c_str() + index, read_len);
- index += read_len;
- return read_len;
- }
- size_t FileReader::readText(char *dest, size_t read_len, aFuncore::Reader::ReadMode &mode) {
- if (!no_first) {
- no_first = true;
- char ch;
- if (fread(&ch, sizeof(char), 1, file) != 1) {
- mode = read_mode_finished;
- return 0;
- }
- if ((unsigned char)ch == (unsigned char)0xEF) {
- /* 处理BOM编码 */
- unsigned char ch_[2];
- if (fread(ch_, sizeof(unsigned char), 2, file) != 2
- || ch_[0] != (unsigned char)0xBB
- || ch_[1] != (unsigned char)0xBF) {
- mode = read_mode_error;
- return 0;
- }
- trackLog(aFunLogger, "Parser utf-8 with BOM");
- } else {
- ungetc(ch, file);
- trackLog(aFunLogger, "Parser utf-8 without BOM");
- }
- }
- size_t len_r = fread(dest, sizeof(char), read_len, file);
- if (aFuntool::clear_ferror(file)) {
- mode = read_mode_error;
- } else if (feof(file))
- mode = read_mode_finished;
- return len_r;
- }
- }
|