diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2016-09-16 17:56:43 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2016-09-16 17:56:43 +0200 |
commit | 407603ca0bc658b278fc7a12e69b37394bbbb757 (patch) | |
tree | 875a33963220e3e13f65c461accdb7549b9f3185 /src/dabOutput/dabOutputFifo.cpp | |
parent | 832952bb3f521e1c022d0faa8b6782f76899a770 (diff) | |
download | dabmux-407603ca0bc658b278fc7a12e69b37394bbbb757.tar.gz dabmux-407603ca0bc658b278fc7a12e69b37394bbbb757.tar.bz2 dabmux-407603ca0bc658b278fc7a12e69b37394bbbb757.zip |
Rework File and Fifo output initialisation
Diffstat (limited to 'src/dabOutput/dabOutputFifo.cpp')
-rw-r--r-- | src/dabOutput/dabOutputFifo.cpp | 69 |
1 files changed, 26 insertions, 43 deletions
diff --git a/src/dabOutput/dabOutputFifo.cpp b/src/dabOutput/dabOutputFifo.cpp index decd443..f466199 100644 --- a/src/dabOutput/dabOutputFifo.cpp +++ b/src/dabOutput/dabOutputFifo.cpp @@ -2,7 +2,7 @@ Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in Right of Canada (Communications Research Center Canada) - Copyright (C) 2013 Matthias P. Braendli + Copyright (C) 2016 Matthias P. Braendli http://mpb.li Fifo output is very similar to file, except it doesn't seek @@ -27,56 +27,39 @@ #include <cstring> #include <fcntl.h> #include <limits.h> -#include <sys/types.h> // mkfifo -#include <sys/stat.h> // mkfifo +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <errno.h> #include "dabOutput.h" int DabOutputFifo::Open(const char* filename) { - char* token = strchr((char*)filename, '?'); - if (token != NULL) { - *(token++) = 0; - char* nextPair; - char* key; - char* value; - // Go through all the &stuff=foo pairs - // Only the key "type" is supported - do { - nextPair = strchr(token, '&'); - if (nextPair != NULL) { - *nextPair = 0; - } - key = token; - value = strchr(token, '='); - if (value != NULL) { - *(value++) = 0; - if (strcmp(key, "type") == 0) { - if (strcmp(value, "raw") == 0) { - this->type_ = ETI_FILE_TYPE_RAW; - break; - } else if (strcmp(value, "framed") == 0) { - this->type_ = ETI_FILE_TYPE_FRAMED; - break; - } else if (strcmp(value, "streamed") == 0) { - this->type_ = ETI_FILE_TYPE_STREAMED; - break; - } else { - etiLog.log(error, - "File type '%s' is not supported.\n", value); - return -1; - } - } - else { - etiLog.log(warn, "Parameter '%s' unknown\n", key); - } + filename_ = SetEtiType(filename); + + // Create the fifo if it does not already exist + struct stat s = {0}; + int ret = stat(filename_.c_str(), &s); + + if (ret == -1) { + if (errno == ENOENT) { + ret = mkfifo(filename_.c_str(), 0666); + if (ret == -1) { + etiLog.level(error) << "Could not create fifo " << filename_ << " : " << + strerror(errno); + return -1; } - } while (nextPair != NULL); + } + else { + etiLog.level(error) << "Could not stat fifo " << filename_ << " : " << + strerror(errno); + return -1; + } } - this->file_ = mkfifo(filename, 0666); - this->file_ = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666); + this->file_ = open(filename_.c_str(), O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666); if (this->file_ == -1) { - perror(filename); + perror(filename_.c_str()); return -1; } return 0; |