diff --git a/src/lib/include/jes/Core.h b/src/lib/include/jes/Core.h index 6cbd098..40ca056 100644 --- a/src/lib/include/jes/Core.h +++ b/src/lib/include/jes/Core.h @@ -5,6 +5,12 @@ #include "jes/Path.h" #include +#ifdef _WIN32 +#define JES_O_BINARY O_BINARY +#else +#define JES_O_BINARY 0 +#endif + namespace jes { typedef Ref StringRef; diff --git a/src/lib/src/FileReader.cc b/src/lib/src/FileReader.cc index 5ee7178..75c72a1 100644 --- a/src/lib/src/FileReader.cc +++ b/src/lib/src/FileReader.cc @@ -1,3 +1,4 @@ +#include "jes.h" #include "jes/FileReader.h" #include "jes/Text.h" #include @@ -43,7 +44,7 @@ namespace jes return true; } - m_fd = open(fname, O_RDONLY); + m_fd = open(fname, O_RDONLY | JES_O_BINARY); if (m_fd < 0) { return false; @@ -51,7 +52,17 @@ namespace jes m_buf = new uint8_t[st.st_size]; - if (read(m_fd, m_buf, st.st_size) != st.st_size) + off_t n_bytes_read = 0u; + for (;;) + { + off_t rd_size = read(m_fd, &m_buf[n_bytes_read], st.st_size - n_bytes_read); + if (rd_size <= 0) + break; + n_bytes_read += rd_size; + if (n_bytes_read >= st.st_size) + break; + } + if (n_bytes_read != st.st_size) { delete[] m_buf; m_buf = NULL;