|
- #include <cerrno>
- #include <cstring>
- #include <stdexcept>
-
- #include <fcntl.h>
- #include <unistd.h>
-
- #include "JackALSARawMidiUtil.h"
-
- void
- Jack::CreateNonBlockingPipe(int *fds)
- {
- if (pipe(fds) == -1) {
- throw std::runtime_error(strerror(errno));
- }
- try {
- SetNonBlocking(fds[0]);
- SetNonBlocking(fds[1]);
- } catch (...) {
- close(fds[1]);
- close(fds[0]);
- throw;
- }
- }
-
- void
- Jack::DestroyNonBlockingPipe(int *fds)
- {
- close(fds[1]);
- close(fds[0]);
- }
-
- void
- Jack::SetNonBlocking(int fd)
- {
- int flags = fcntl(fd, F_GETFL);
- if (flags == -1) {
- throw std::runtime_error(strerror(errno));
- }
- if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
- throw std::runtime_error(strerror(errno));
- }
- }
|