summaryrefslogtreecommitdiffstats
path: root/src/util.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2011-05-24 16:47:24 (GMT)
committerEvan Martin <martine@danga.com>2011-05-24 16:47:24 (GMT)
commit9227b6d0ddd8ae0171aa466ceda797a948441740 (patch)
treef8c6049ed9ab350fb83dda6249aca84e07e5e381 /src/util.cc
parentb1c1bae3e0da4cd8fdd2b34a8619b233624d8513 (diff)
downloadNinja-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.cc23
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;
+}