Fix seriously broken implementation of GetMagicNumber.
authorReid Spencer <rspencer@reidspencer.com>
Thu, 2 Dec 2004 09:09:48 +0000 (09:09 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Thu, 2 Dec 2004 09:09:48 +0000 (09:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18422 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Unix/Path.cpp
lib/System/Unix/Path.inc

index 70cc4f01032f2253e502ecc98a7120718f87c7c9..5d2a4b688c42fe01c59eb0f3309eb58cfffecadb 100644 (file)
@@ -178,11 +178,13 @@ bool Path::getMagicNumber(std::string& Magic, unsigned len) const {
   int fd = ::open(path.c_str(),O_RDONLY);
   if (fd < 0)
     return false;
-  if (0 != ::read(fd, buf, len))
+  ssize_t bytes_read = ::read(fd, buf, len);
+  ::close(fd);
+  if (ssize_t(len) != bytes_read) {
+    Magic.clear();
     return false;
-  close(fd);
-  buf[len] = '\0';
-  Magic = buf;
+  }
+  Magic.assign(buf,len);
   return true;
 }
 
index 70cc4f01032f2253e502ecc98a7120718f87c7c9..5d2a4b688c42fe01c59eb0f3309eb58cfffecadb 100644 (file)
@@ -178,11 +178,13 @@ bool Path::getMagicNumber(std::string& Magic, unsigned len) const {
   int fd = ::open(path.c_str(),O_RDONLY);
   if (fd < 0)
     return false;
-  if (0 != ::read(fd, buf, len))
+  ssize_t bytes_read = ::read(fd, buf, len);
+  ::close(fd);
+  if (ssize_t(len) != bytes_read) {
+    Magic.clear();
     return false;
-  close(fd);
-  buf[len] = '\0';
-  Magic = buf;
+  }
+  Magic.assign(buf,len);
   return true;
 }