--- 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;
}