]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Cleanup read2n and mark unixDie as [[noreturtn]] 14381/head
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 25 Jun 2024 12:46:30 +0000 (14:46 +0200)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 25 Jun 2024 12:46:30 +0000 (14:46 +0200)
It might even be the case that this makes Coverity realize
pos does not overflow.

pdns/misc.cc
pdns/misc.hh

index b69155daea766b3a1dd22a61d82cb253f60d33f1..8b206295177dfe4a66c11063f300478e0afff827 100644 (file)
@@ -95,24 +95,26 @@ size_t writen2(int fileDesc, const void *buf, size_t count)
   return count;
 }
 
-size_t readn2(int fd, void* buffer, size_t len)
+size_t readn2(int fileDesc, void* buffer, size_t len)
 {
-  size_t pos=0;
-  ssize_t res;
-  for(;;) {
-    res = read(fd, (char*)buffer + pos, len - pos);
-    if(res == 0)
+  size_t pos = 0;
+
+  for (;;) {
+    auto res = read(fileDesc, static_cast<char *>(buffer) + pos, len - pos); // NOLINT(cppcoreguidelines-pro-bounds-pointer-arithmetic): it's the API
+    if (res == 0) {
       throw runtime_error("EOF while reading message");
-    if(res < 0) {
-      if (errno == EAGAIN)
+    }
+    if (res < 0) {
+      if (errno == EAGAIN) {
         throw std::runtime_error("used readn2 on non-blocking socket, got EAGAIN");
-      else
-        unixDie("failed in readn2");
+      }
+      unixDie("failed in readn2");
     }
 
-    pos+=(size_t)res;
-    if(pos == len)
+    pos += static_cast<size_t>(res);
+    if (pos == len) {
       break;
+    }
   }
   return len;
 }
index e9a0dad36a221b5a202e60dfad33ea893e996168..86e620b8f99c59afd177f05b3f77fe45843d38e5 100644 (file)
@@ -167,7 +167,7 @@ vstringtok (Container &container, string const &in,
 
 size_t writen2(int fd, const void *buf, size_t count);
 inline size_t writen2(int fd, const std::string &s) { return writen2(fd, s.data(), s.size()); }
-size_t readn2(int fd, void* buffer, size_t len);
+size_t readn2(int fileDesc, void* buffer, size_t len);
 size_t readn2WithTimeout(int fd, void* buffer, size_t len, const struct timeval& idleTimeout, const struct timeval& totalTimeout={0,0}, bool allowIncomplete=false);
 size_t writen2WithTimeout(int fd, const void * buffer, size_t len, const struct timeval& timeout);
 
@@ -319,9 +319,9 @@ inline double getTime()
   return now.tv_sec+now.tv_usec/1000000.0;
 }
 
-inline void unixDie(const string &why)
+[[noreturn]] inline void unixDie(const string &why)
 {
-  throw runtime_error(why+": "+stringerror());
+  throw runtime_error(why + ": " + stringerror(errno));
 }
 
 string makeHexDump(const string& str);