Added a kqueue class which isn't being used yet, but was part of trying to work around the limitations with the unix select() call and how it is limited to FD_SETSIZE file descriptors.

Also added a TimeSpecTimeout class which can be used with any calls that take a "struct timespec *" as an argument. It is used by the KQueue class.

Also updated some project settings.



git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@175377 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Utility/KQueue.h b/source/Utility/KQueue.h
new file mode 100644
index 0000000..8a23256
--- /dev/null
+++ b/source/Utility/KQueue.h
@@ -0,0 +1,72 @@
+//===--------------------- KQueue.h -----------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef utility_KQueue_h_
+#define utility_KQueue_h_
+
+#if defined(__APPLE__)
+#define LLDB_USE_KQUEUES
+#endif
+
+#ifdef LLDB_USE_KQUEUES
+
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/time.h>
+
+#include "lldb-defines.h"
+
+namespace lldb_private {
+
+class KQueue
+{
+public:
+    KQueue() :
+        m_fd(-1)
+    {
+    }
+
+    ~KQueue()
+    {
+        Close();
+    }
+    
+    bool
+    IsValid () const
+    {
+        return m_fd >= 0;
+    }
+
+    int
+    GetFD (bool can_create);
+
+    int
+    Close ();
+
+    bool
+    AddFDEvent (int fd,
+                bool read,
+                bool write,
+                bool vnode);
+
+    int
+    WaitForEvents (struct kevent *events,
+                   int num_events,
+                   Error &error,
+                   uint32_t timeout_usec = UINT32_MAX); // UINT32_MAX means infinite timeout
+
+protected:
+    int m_fd; // The kqueue fd
+};
+
+} // namespace lldb_private
+
+#endif // #ifdef LLDB_USE_KQUEUES
+
+#endif // #ifndef utility_KQueue_h_