From: Maarten ter Huurne <maarten@treewalker.org>
Date: Mon, 15 Sep 2014 00:24:41 +0200
Subject: Renamed sched.h to eventqueue.h

There is a <sched.h> system header that got shadowed by "sched.h".
While Screen itself doesn't include <sched.h>, other system headers
might include it indirectly. This broke the build when using uClibc
with pthread support.

Signed-off-by: Maarten ter Huurne <maarten@treewalker.org>
---
 eventqueue.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 sched.h      | 48 ------------------------------------------------
 screen.h     |  2 +-
 3 files changed, 49 insertions(+), 49 deletions(-)
 create mode 100644 eventqueue.h
 delete mode 100644 sched.h

diff --git a/eventqueue.h b/eventqueue.h
new file mode 100644
index 0000000..fdc3fc4
--- /dev/null
+++ b/eventqueue.h
@@ -0,0 +1,48 @@
+/* Copyright (c) 2008, 2009
+ *      Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
+ *      Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
+ *      Micah Cowan (micah@cowan.name)
+ *      Sadrul Habib Chowdhury (sadrul@users.sourceforge.net)
+ * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007
+ *      Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
+ *      Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
+ * Copyright (c) 1987 Oliver Laumann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program (see the file COPYING); if not, see
+ * http://www.gnu.org/licenses/, or contact Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ *
+ ****************************************************************
+ * $Id$ GNU
+ */
+
+struct event
+{
+  struct event *next;
+  void (*handler) __P((struct event *, char *));
+  char *data;
+  int fd;
+  int type;
+  int pri;
+  struct timeval timeout;
+  int queued;		/* in evs queue */
+  int active;		/* in fdset */
+  int *condpos;		/* only active if condpos - condneg > 0 */
+  int *condneg;
+};
+
+#define EV_TIMEOUT	0
+#define EV_READ		1
+#define EV_WRITE	2
+#define EV_ALWAYS	3
diff --git a/sched.h b/sched.h
deleted file mode 100644
index fdc3fc4..0000000
--- a/sched.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (c) 2008, 2009
- *      Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
- *      Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
- *      Micah Cowan (micah@cowan.name)
- *      Sadrul Habib Chowdhury (sadrul@users.sourceforge.net)
- * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007
- *      Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
- *      Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
- * Copyright (c) 1987 Oliver Laumann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program (see the file COPYING); if not, see
- * http://www.gnu.org/licenses/, or contact Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
- *
- ****************************************************************
- * $Id$ GNU
- */
-
-struct event
-{
-  struct event *next;
-  void (*handler) __P((struct event *, char *));
-  char *data;
-  int fd;
-  int type;
-  int pri;
-  struct timeval timeout;
-  int queued;		/* in evs queue */
-  int active;		/* in fdset */
-  int *condpos;		/* only active if condpos - condneg > 0 */
-  int *condneg;
-};
-
-#define EV_TIMEOUT	0
-#define EV_READ		1
-#define EV_WRITE	2
-#define EV_ALWAYS	3
diff --git a/screen.h b/screen.h
index 603ca3f..34238c8 100644
--- a/screen.h
+++ b/screen.h
@@ -43,7 +43,7 @@
 #include "osdef.h"
 
 #include "ansi.h"
-#include "sched.h"
+#include "eventqueue.h"
 #include "acls.h"
 #include "comm.h"
 #include "layer.h"
-- 
1.8.4.5

