diff options
author | Max Kellermann <max@duempel.org> | 2013-01-03 10:16:05 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-01-03 10:16:05 +0100 |
commit | 90fe4c5124e3fd335f05804d3cc47ba996e62b14 (patch) | |
tree | ef7fb6b3cb2edbe4898431db611f04fb281129fc /src/TextFile.hxx | |
parent | 2452447c814048ed72e95a459c76b4be65962b5c (diff) | |
download | mpd-90fe4c5124e3fd335f05804d3cc47ba996e62b14.tar.gz mpd-90fe4c5124e3fd335f05804d3cc47ba996e62b14.tar.xz mpd-90fe4c5124e3fd335f05804d3cc47ba996e62b14.zip |
TextFile: convert to a class
Diffstat (limited to 'src/TextFile.hxx')
-rw-r--r-- | src/TextFile.hxx | 49 |
1 files changed, 38 insertions, 11 deletions
diff --git a/src/TextFile.hxx b/src/TextFile.hxx index 5bd6dbd3c..25f6ea7a8 100644 --- a/src/TextFile.hxx +++ b/src/TextFile.hxx @@ -20,20 +20,47 @@ #ifndef MPD_TEXT_FILE_HXX #define MPD_TEXT_FILE_HXX +#include "gcc.h" + #include <glib.h> #include <stdio.h> -/** - * Reads a line from the input file, and strips trailing space. There - * is a reasonable maximum line length, only to prevent denial of - * service. - * - * @param file the source file, opened in text mode - * @param buffer an allocator for the buffer - * @return a pointer to the line, or NULL on end-of-file or error - */ -char * -read_text_line(FILE *file, GString *buffer); +class TextFile { + static constexpr size_t max_length = 512 * 1024; + static constexpr size_t step = 1024; + + FILE *const file; + + GString *const buffer; + +public: + TextFile(const char *path_fs) + :file(fopen(path_fs, "r")), buffer(g_string_sized_new(step)) {} + + TextFile(const TextFile &other) = delete; + + ~TextFile() { + if (file != nullptr) + fclose(file); + + g_string_free(buffer, true); + } + + bool HasFailed() const { + return gcc_unlikely(file == nullptr); + } + + /** + * Reads a line from the input file, and strips trailing + * space. There is a reasonable maximum line length, only to + * prevent denial of service. + * + * @param file the source file, opened in text mode + * @param buffer an allocator for the buffer + * @return a pointer to the line, or NULL on end-of-file or error + */ + char *ReadLine(); +}; #endif |