]> git.pond.sub.org Git - empserver/commitdiff
(debug): New.
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 2 Apr 2004 15:40:43 +0000 (15:40 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Fri, 2 Apr 2004 15:40:43 +0000 (15:40 +0000)
(main): Set it on -d.
(oops, CANT_HAPPEN): New.

include/misc.h
include/prototypes.h
src/lib/common/log.c
src/server/main.c

index ca9b8a9df5a08ecabec3ccf490281ce86b427cfd..e89a016fbe0d92a8964f2ab0b3521d41635472a8 100644 (file)
@@ -123,6 +123,15 @@ typedef short coord;
 #define hours(x)       (60*60*(x))
 #define days(x)                (60*60*24*(x))
 
+extern int debug;
+
+/*
+ * If EXPR is true, an internal error occured.
+ * Return EXPR != 0.
+ * Usage: if (CANT_HAPPEN(...)) recovery_code();
+ */
+#define CANT_HAPPEN(expr) ((expr) ? oops(#expr, __FILE__, __LINE__) : 0)
+
 typedef int (*qsort_func_t) (const void *, const void *);
 
        /* return codes from command routines */
index 553940feba9b74dd2b9ca994f96f599a9fa3204c..59b25bc2fa47ae43d11b23c4e53572af47690b7b 100644 (file)
@@ -128,6 +128,7 @@ extern int has_helpful_engineer(coord x, coord y, natid cn);
 /* log.c */
 extern void loginit(s_char *);
 extern void logerror(s_char *, ...) ATTRIBUTE((format (printf, 1, 2)));
+extern int oops(char *, char *, int);
 /* maps.c */
 extern int draw_map(int, s_char, int, struct nstr_sect *, int);
 extern int unit_map(int, int, struct nstr_sect *, s_char *);
index f3200ec7e187962960cdcda44b3f133857eb8eab..4e959896e25006481c5849c4cff6acf04e94573b 100644 (file)
@@ -99,3 +99,15 @@ logerror(s_char *format, ...)
 #endif
     va_end(list);
 }
+
+/*
+ * Log internal error MSG occured in FILE:LINE.
+ * If debugging, call abort(), else return 1.
+ */
+int
+oops(char *msg, char *file, int line)
+{
+  logerror("Oops: %s in %s:%d\n", msg, file, line);
+  if (debug) abort();
+  return 1;
+}
index 0af848f4ea03641757687fb031dc46235d495c64..fbe69c522834bf4bb446ce10ee625288b6de46e5 100644 (file)
@@ -80,13 +80,19 @@ static void loc_NTTerm(void);
 static int mainpid = 0;
 #endif
 
+/*
+ * Debugging?
+ * If yes, don't fork into background, don't catch certain signals,
+ * call abort() on internal error.
+ */
+int debug = 0;
+
 int
 main(int argc, char **argv)
 {
     time_t now;
     int hour[2];
     int flags = 0;
-    int debug = 0;
     int op;
     char *config_file = NULL;
     extern char *optarg;