瀏覽代碼

Fixed resource leak

Tatsuhiro Tsujikawa 13 年之前
父節點
當前提交
f42199b46d
共有 2 個文件被更改,包括 6 次插入2 次删除
  1. 3 1
      src/GenericParser.h
  2. 3 1
      src/XmlParser.cc

+ 3 - 1
src/GenericParser.h

@@ -93,10 +93,12 @@ typename Parser::ResultType parseFile(Parser& parser,
   int fd;
   // TODO Overrode a2open(const char*,..) and a2open(const std::wstring&,..)
   while((fd = a2open(utf8ToWChar(filename).c_str(),
-                     O_BINARY | O_RDONLY, OPEN_MODE)) == -1 && fd != EINTR);
+                     O_BINARY | O_RDONLY, OPEN_MODE)) == -1
+        && errno != EINTR);
   if(fd == -1) {
     return Parser::ParserStateMachineType::noResult();
   }
+  auto_delete_r<int, int> fdDeleter(fd, close);
   char buf[4096];
   ssize_t nread;
   ssize_t nproc;

+ 3 - 1
src/XmlParser.cc

@@ -47,11 +47,13 @@ bool parseFile(const std::string& filename, ParserStateMachine* psm)
     fd = STDIN_FILENO;
   } else {
     while((fd = a2open(utf8ToWChar(filename).c_str(),
-                       O_BINARY | O_RDONLY, OPEN_MODE)) == -1 && fd != EINTR);
+                       O_BINARY | O_RDONLY, OPEN_MODE)) == -1
+          && errno != EINTR);
     if(fd == -1) {
       return false;
     }
   }
+  auto_delete_r<int, int> fdDeleter(fd, close);
   XmlParser ps(psm);
   char buf[4096];
   ssize_t nread;