Switch to side-by-side view

--- a/mpd2src/fiforeader.cpp
+++ b/mpd2src/fiforeader.cpp
@@ -33,14 +33,14 @@
 
 FifoReader::FifoReader(const string& fn, int sampleRate, int bitsPerSample,
                        int chans, bool needswap, bool blocking)
-    : m_fn(fn), m_needswap(needswap), m_blocking(blocking),
-      m_fd(-1), m_tmpbuf(0), m_tmpbufsize(0)
+    : m_fn(fn), m_needswap(needswap), m_blocking(blocking)
 {
     setAudioParams(sampleRate, bitsPerSample, chans);
 }
 
 FifoReader::~FifoReader()
 {
+    LOGDEB1("FifoReader::~FifoReader\n");
     if (m_fn.compare("stdin") && m_fd >= 0)
         ::close(m_fd);
     
@@ -50,7 +50,7 @@
 
 bool FifoReader::open()
 {
-    LOGDEB("FifoReader::open: blocking: " << m_blocking << endl);
+    LOGDEB1("FifoReader::open: blocking: " << m_blocking << endl);
     if (m_fn.compare("stdin")) {
         int flags = m_blocking ? O_RDONLY : O_RDONLY|O_NONBLOCK;
         if ((m_fd = ::open(m_fn.c_str(), flags)) < 0) {
@@ -68,7 +68,7 @@
 
 void FifoReader::close()
 {
-    LOGDEB("FifoReader::close" << endl);
+    LOGDEB1("FifoReader::close" << endl);
     if (m_fd > 0) {
         ::close(m_fd);
         m_fd = -1;
@@ -77,28 +77,33 @@
 
 const unsigned char *FifoReader::data(size_t size, ssize_t &nread)
 {
-    if (m_fd < 0) // nothing to read from
-        return 0;
+    nread = 0;
+    if (m_fd < 0) {
+        LOGERR("FifoReader::data: not open\n");
+        return nullptr;
+    }
 
-    nread = 0;
-
-    //LOGDEB("FifoReader: data " << size << " bytes. blocking " << m_blocking
-    // << endl);
+    LOGDEB1("FifoReader::data: cnt "<<size<< "  blocking " << m_blocking<<endl);
     if (m_tmpbufsize < size) {
         m_tmpbuf = (unsigned char *)realloc(m_tmpbuf, size);
+        if (nullptr == m_tmpbuf) {
+            LOGERR("FifoReader::data: could not alloc " << size << " bytes\n");
+            return nullptr;
+        }
         m_tmpbufsize = size;
     }
 
     if (m_blocking) {
         size_t remaining = size;
         while (remaining) {
-            ssize_t nread = read(m_fd, m_tmpbuf + size - remaining, remaining);
-            if (nread <= 0) {
-                LOGERR("FifoReader::read: ret " << nread << " errno " <<
+            ssize_t cnt = read(m_fd, m_tmpbuf + size - remaining, remaining);
+            if (cnt <= 0) {
+                LOGERR("FifoReader::data: read ret " << nread << " errno " <<
                        errno << " : " << strerror(errno) << endl);
-                return 0;
+                return nullptr;
             } else {
-                remaining -= nread;
+                remaining -= cnt;
+                nread += cnt;
             }
         }
     } else {
@@ -106,12 +111,12 @@
         if (nread == -1) {
             if (errno == EAGAIN)
                 return m_tmpbuf;
-            LOGERR("FifoReader::read: ret " << nread << " errno " <<
-            errno << " : " << strerror(errno) << endl);
-            return 0;
+            LOGERR("FifoReader::data: read ret " << nread << " errno " <<
+                   errno << " : " << strerror(errno) << endl);
+            return nullptr;
         }
     }
 
-    //LOGDEB("FifoReader: data done" << endl);
+    LOGDEB1("FifoReader: data() done. nread " << nread << endl);
     return m_tmpbuf;
 }