empserver/src/scripts/nightly/patches/All/emptime.c.patch
Markus Armbruster 10768189e2 Unbreak nightly build
The nightly build uses a gross hack to keep timestamps stable: it
replaces the system's time() by emp_time().  It doesn't replace other
time-related functions such as gettimeofday().  Works as long as we
don't mix hacked time with unhacked time.

The previous commit compares time gotten from gettimeofday() with time
gotten from time().  The nightly build's I/O timeouts become zero,
which makes login impossible.

Replace gettimeofday(), too.
2012-03-31 19:03:19 +02:00

115 lines
3.4 KiB
Diff

diff --git a/include/emptime.h b/include/emptime.h
new file mode 100644
index 0000000..3c1eb7b
--- /dev/null
+++ b/include/emptime.h
@@ -0,0 +1,43 @@
+/*
+ * Empire - A multi-player, client/server Internet based war game.
+ * Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Ken Stevens, Steve McClure, Markus Armbruster
+ *
+ * Empire 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 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * ---
+ *
+ * See files README, COPYING and CREDITS in the root of the source
+ * tree for related information and legal notices. It is expected
+ * that future projects/authors will amend these files as needed.
+ *
+ * ---
+ *
+ * emptime.h: Time functions for regression testing
+ *
+ * Known contributors to this file:
+ * Ron Koenderink, 2008
+ * Markus Armbruster, 2012
+ */
+
+#ifndef EMPTIME_H
+#define EMPTIME_H
+
+#include <sys/time.h>
+#include <time.h>
+
+extern time_t emp_time(time_t *, const char []);
+extern int emp_gettimeofday(struct timeval *, void *);
+
+#endif
diff --git a/src/lib/gen/emptime.c b/src/lib/gen/emptime.c
new file mode 100644
index 0000000..4461093
--- /dev/null
+++ b/src/lib/gen/emptime.c
@@ -0,0 +1,60 @@
+/*
+ * Empire - A multi-player, client/server Internet based war game.
+ * Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Ken Stevens, Steve McClure, Markus Armbruster
+ *
+ * Empire 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 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * ---
+ *
+ * See files README, COPYING and CREDITS in the root of the source
+ * tree for related information and legal notices. It is expected
+ * that future projects/authors will amend these files as needed.
+ *
+ * ---
+ *
+ * emptime.c: Time functions for regression testing
+ *
+ * Known contributors to this file:
+ * Ron Koenderink, 2008
+ * Markus Armbruster, 2012
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "emptime.h"
+
+static time_t now = (time_t)100L;
+
+time_t
+emp_time(time_t * time_ptr, const char function[])
+{
+ if (strcmp(function, "update_main") == 0)
+ now += 100L;
+
+ if (time_ptr != NULL)
+ *time_ptr = now;
+
+ return now;
+}
+
+int
+emp_gettimeofday(struct timeval *tv, void *tz)
+{
+ if (tv) {
+ tv->tv_sec = now;
+ tv->tv_usec = 0;
+ }
+ return 0;
+}