summaryrefslogtreecommitdiff
path: root/lib/System/Unix/Path.inc
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2004-11-16 17:14:08 +0000
committerReid Spencer <rspencer@reidspencer.com>2004-11-16 17:14:08 +0000
commitbe31d2ad781efa4e1d134ef18ef1ec5d9848572f (patch)
tree0fb595150307a59bb6eede7abdec41049b5b4e1a /lib/System/Unix/Path.inc
parent0033baf94e049e075f3ba4700c109779e2d7c131 (diff)
downloadllvm-be31d2ad781efa4e1d134ef18ef1ec5d9848572f.tar.gz
llvm-be31d2ad781efa4e1d134ef18ef1ec5d9848572f.tar.bz2
llvm-be31d2ad781efa4e1d134ef18ef1ec5d9848572f.tar.xz
* Use low-level unix I/O interface since we're on Unix.
* Don't use variable length arrays (replaced with alloca) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17901 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/System/Unix/Path.inc')
-rw-r--r--lib/System/Unix/Path.inc24
1 files changed, 17 insertions, 7 deletions
diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc
index 55ef6669ee..70cc4f0103 100644
--- a/lib/System/Unix/Path.inc
+++ b/lib/System/Unix/Path.inc
@@ -17,6 +17,7 @@
//===----------------------------------------------------------------------===//
#include <llvm/Config/config.h>
+#include <llvm/Config/alloca.h>
#include "Unix.h"
#include <sys/stat.h>
#include <fcntl.h>
@@ -157,20 +158,29 @@ Path::getBasename() const {
bool Path::hasMagicNumber(const std::string &Magic) const {
size_t len = Magic.size();
- char buf[ 1 + len];
- std::ifstream f(path.c_str());
- f.read(buf, len);
+ assert(len < 1024 && "Request for magic string too long");
+ char* buf = (char*) alloca(1 + len);
+ int fd = ::open(path.c_str(),O_RDONLY);
+ if (fd < 0)
+ return false;
+ if (0 != ::read(fd, buf, len))
+ return false;
+ close(fd);
buf[len] = '\0';
- f.close();
return Magic == buf;
}
bool Path::getMagicNumber(std::string& Magic, unsigned len) const {
if (!isFile())
return false;
- char buf[1 + len];
- std::ifstream f(path.c_str());
- f.read(buf,len);
+ assert(len < 1024 && "Request for magic string too long");
+ char* buf = (char*) alloca(1 + len);
+ int fd = ::open(path.c_str(),O_RDONLY);
+ if (fd < 0)
+ return false;
+ if (0 != ::read(fd, buf, len))
+ return false;
+ close(fd);
buf[len] = '\0';
Magic = buf;
return true;