We now have a current svn snapshot of libqxt in our contrib dir, and
[quassel.git] / src / contrib / libqxt-2007-10-24 / src / network / qxtnamedpipe_unix.cpp
diff --git a/src/contrib/libqxt-2007-10-24/src/network/qxtnamedpipe_unix.cpp b/src/contrib/libqxt-2007-10-24/src/network/qxtnamedpipe_unix.cpp
new file mode 100644 (file)
index 0000000..2f5c7cf
--- /dev/null
@@ -0,0 +1,51 @@
+#include "QxtNamedPipe.h"
+#ifdef Q_OS_UNIX
+#    include <fcntl.h>
+#else
+#    error "No Windows implementation for QxtNamedPipe"
+#endif
+
+class QxtNamedPipePrivate : public QxtPrivate<QxtNamedPipe>
+{
+public:
+    QxtNamedPipePrivate();
+    QXT_DECLARE_PUBLIC(QxtNamedPipe);
+
+    QString pipeName;
+    int fd;
+};
+
+QxtNamedPipe::QxtNamedPipe(const QString& name, QObject* parent) : QAbstractSocket(QAbstractSocket::UnknownSocketType, parent)
+{
+    QXT_INIT_PRIVATE(QxtNamedPipe);
+    qxt_d().pipeName = name;
+    qxt_d().fd = 0;
+}
+
+bool QxtNamedPipe::open(QIODevice::OpenMode mode)
+{
+    int m = O_RDWR;
+    if (!(mode & QIODevice::ReadOnly)) m = O_WRONLY;
+    else if (!(mode & QIODevice::WriteOnly)) m = O_RDONLY;
+    qxt_d().fd = ::open(qPrintable(qxt_d().pipeName), m);
+    return (qxt_d().fd != 0);
+}
+
+bool QxtNamedPipe::open(const QString& name, QIODevice::OpenMode mode)
+{
+    qxt_d().pipeName = name;
+    return QxtNamedPipe::open(mode);
+}
+
+void QxtNamedPipe::close()
+{
+    if (qxt_d().fd) ::close(qxt_d().fd);
+}
+
+QByteArray QxtNamedPipe::readAvailableBytes()
+{
+    char ch;
+    QByteArray rv;
+    while (getChar(&ch)) rv += ch;
+    return rv;
+}