diff options
author | Evan Martin <martine@danga.com> | 2011-05-24 16:47:24 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2011-05-24 16:47:24 (GMT) |
commit | 9227b6d0ddd8ae0171aa466ceda797a948441740 (patch) | |
tree | f8c6049ed9ab350fb83dda6249aca84e07e5e381 /src/util.cc | |
parent | b1c1bae3e0da4cd8fdd2b34a8619b233624d8513 (diff) | |
download | Ninja-9227b6d0ddd8ae0171aa466ceda797a948441740.zip Ninja-9227b6d0ddd8ae0171aa466ceda797a948441740.tar.gz Ninja-9227b6d0ddd8ae0171aa466ceda797a948441740.tar.bz2 |
move ReadFile into util
Diffstat (limited to 'src/util.cc')
-rw-r--r-- | src/util.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/util.cc b/src/util.cc index 63d3800..ff6d18e 100644 --- a/src/util.cc +++ b/src/util.cc @@ -14,6 +14,7 @@ #include "util.h" +#include <errno.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> @@ -150,3 +151,25 @@ int MakeDir(const string& path) { return mkdir(path.c_str(), 0777); #endif } + +int ReadFile(const string& path, string* contents, string* err) { + FILE* f = fopen(path.c_str(), "r"); + if (!f) { + err->assign(strerror(errno)); + return -errno; + } + + char buf[64 << 10]; + size_t len; + while ((len = fread(buf, 1, sizeof(buf), f)) > 0) { + contents->append(buf, len); + } + if (ferror(f)) { + err->assign(strerror(errno)); // XXX errno? + contents->clear(); + fclose(f); + return -errno; + } + fclose(f); + return 0; +} |