From 9dbb37a0cd7757bdbfb5f31856340c22893a790d Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 1 Aug 2016 22:29:28 +0200 Subject: [PATCH] Add a file getline() function to parse files one line at a time --- renderdoc/os/os_specific.h | 2 ++ renderdoc/os/posix/posix_stringio.cpp | 20 ++++++++++++++++++++ renderdoc/os/win32/win32_stringio.cpp | 20 ++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/renderdoc/os/os_specific.h b/renderdoc/os/os_specific.h index 88d991b33..25b3daab1 100644 --- a/renderdoc/os/os_specific.h +++ b/renderdoc/os/os_specific.h @@ -242,6 +242,8 @@ FILE *fopen(const char *filename, const char *mode); size_t fread(void *buf, size_t elementSize, size_t count, FILE *f); size_t fwrite(const void *buf, size_t elementSize, size_t count, FILE *f); +std::string getline(FILE *f); + uint64_t ftell64(FILE *f); void fseek64(FILE *f, uint64_t offset, int origin); diff --git a/renderdoc/os/posix/posix_stringio.cpp b/renderdoc/os/posix/posix_stringio.cpp index fc56f9208..63e0ffad9 100644 --- a/renderdoc/os/posix/posix_stringio.cpp +++ b/renderdoc/os/posix/posix_stringio.cpp @@ -249,6 +249,26 @@ FILE *fopen(const char *filename, const char *mode) return ::fopen(filename, mode); } +string getline(FILE *f) +{ + string ret; + + while(!FileIO::feof(f)) + { + char c = (char)::fgetc(f); + + if(FileIO::feof(f)) + break; + + if(c != 0 && c != '\n') + ret.push_back(c); + else + break; + } + + return ret; +} + size_t fread(void *buf, size_t elementSize, size_t count, FILE *f) { return ::fread(buf, elementSize, count, f); diff --git a/renderdoc/os/win32/win32_stringio.cpp b/renderdoc/os/win32/win32_stringio.cpp index d53fc72b2..475fdcf5c 100644 --- a/renderdoc/os/win32/win32_stringio.cpp +++ b/renderdoc/os/win32/win32_stringio.cpp @@ -343,6 +343,26 @@ FILE *fopen(const char *filename, const char *mode) return ret; } +string getline(FILE *f) +{ + string ret; + + while(!FileIO::feof(f)) + { + char c = (char)::fgetc(f); + + if(FileIO::feof(f)) + break; + + if(c != 0 && c != '\n') + ret.push_back(c); + else + break; + } + + return ret; +} + size_t fread(void *buf, size_t elementSize, size_t count, FILE *f) { return ::fread(buf, elementSize, count, f);