file_reader.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "file_reader/file_reader.hpp"
  2. std::string FileReader::getline(File* file) {
  3. std::string str;
  4. size_t newline_index = 0;
  5. bool found_eol = false;
  6. while(1) {
  7. if(file_buf_cnt > 0) {
  8. size_t end_index = 0;
  9. char* endline_ptr = (char*)memchr(file_buf, '\n', file_buf_cnt);
  10. newline_index = endline_ptr - file_buf;
  11. if(endline_ptr == 0) {
  12. end_index = file_buf_cnt;
  13. } else if(newline_index < file_buf_cnt) {
  14. end_index = newline_index + 1;
  15. found_eol = true;
  16. } else {
  17. furi_assert(0);
  18. }
  19. str.append(file_buf, end_index);
  20. memmove(file_buf, &file_buf[end_index], file_buf_cnt - end_index);
  21. file_buf_cnt = file_buf_cnt - end_index;
  22. if(found_eol) break;
  23. }
  24. file_buf_cnt +=
  25. fs_api->file.read(file, &file_buf[file_buf_cnt], sizeof(file_buf) - file_buf_cnt);
  26. if(file_buf_cnt == 0) {
  27. break; // end of reading
  28. }
  29. }
  30. return str;
  31. }