Ok, the long awaited config wizard is here (at least in a very basic state). There...
[quassel.git] / src / contrib / libqxt-2007-10-24 / src / network / qxtnamedpipe_unix.cpp
1 #include "QxtNamedPipe.h"
2 #ifdef Q_OS_UNIX
3 #    include <fcntl.h>
4 #else
5 #    error "No Windows implementation for QxtNamedPipe"
6 #endif
7
8 class QxtNamedPipePrivate : public QxtPrivate<QxtNamedPipe>
9 {
10 public:
11     QxtNamedPipePrivate();
12     QXT_DECLARE_PUBLIC(QxtNamedPipe);
13
14     QString pipeName;
15     int fd;
16 };
17
18 QxtNamedPipe::QxtNamedPipe(const QString& name, QObject* parent) : QAbstractSocket(QAbstractSocket::UnknownSocketType, parent)
19 {
20     QXT_INIT_PRIVATE(QxtNamedPipe);
21     qxt_d().pipeName = name;
22     qxt_d().fd = 0;
23 }
24
25 bool QxtNamedPipe::open(QIODevice::OpenMode mode)
26 {
27     int m = O_RDWR;
28     if (!(mode & QIODevice::ReadOnly)) m = O_WRONLY;
29     else if (!(mode & QIODevice::WriteOnly)) m = O_RDONLY;
30     qxt_d().fd = ::open(qPrintable(qxt_d().pipeName), m);
31     return (qxt_d().fd != 0);
32 }
33
34 bool QxtNamedPipe::open(const QString& name, QIODevice::OpenMode mode)
35 {
36     qxt_d().pipeName = name;
37     return QxtNamedPipe::open(mode);
38 }
39
40 void QxtNamedPipe::close()
41 {
42     if (qxt_d().fd) ::close(qxt_d().fd);
43 }
44
45 QByteArray QxtNamedPipe::readAvailableBytes()
46 {
47     char ch;
48     QByteArray rv;
49     while (getChar(&ch)) rv += ch;
50     return rv;
51 }