applied patch from Andreas Persenius <ndap@swipnet.se> that updates the
[platform/upstream/glib.git] / glib / gbacktrace.c
index 89edd91..4d0ba82 100644 (file)
@@ -2,20 +2,37 @@
  * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2 of the License, or (at your option) any later version.
  *
  * This library 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
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
  *
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe ; except for g_on_error_stack_trace, but who wants thread safety 
+ * then
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <signal.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <string.h> /* for bzero on BSD systems */
 #endif
 
-#ifdef _MSC_VER
-#include <process.h>           /* For _getpid() */
+#ifdef G_OS_WIN32
+#  define STRICT               /* Strict typing, please */
+#  include <windows.h>
 #endif
 
 #ifndef NO_FD_SET
 #  define SELECT_MASK fd_set
 #else
-#  ifndef _AIX
-     typedef long fd_mask;
-#  endif
 #  if defined(_IBMR2)
 #    define SELECT_MASK void
 #  else
@@ -68,6 +83,7 @@ volatile gboolean glib_on_error_halt = TRUE;
 void
 g_on_error_query (const gchar *prg_name)
 {
+#ifndef G_OS_WIN32
   static const gchar *query1 = "[E]xit, [H]alt";
   static const gchar *query2 = ", show [S]tack trace";
   static const gchar *query3 = " or [P]roceed";
@@ -94,7 +110,10 @@ g_on_error_query (const gchar *prg_name)
             query3);
   fflush (stdout);
   
-  fgets (buf, 8, stdin);
+  if (isatty(0) && isatty(1))
+    fgets (buf, 8, stdin); 
+  else
+    strcpy (buf, "E\n");
 
   if ((buf[0] == 'E' || buf[0] == 'e')
       && buf[1] == '\n')
@@ -119,12 +138,21 @@ g_on_error_query (const gchar *prg_name)
     }
   else
     goto retry;
+#else
+  if (!prg_name)
+    prg_name = g_get_prgname ();
+  
+  MessageBox (NULL, "g_on_error_query called, program terminating",
+             (prg_name && *prg_name) ? prg_name : NULL,
+             MB_OK|MB_ICONERROR);
+  _exit(0);
+#endif
 }
 
 void
 g_on_error_stack_trace (const gchar *prg_name)
 {
-#ifndef NATIVE_WIN32
+#ifdef G_OS_UNIX
   pid_t pid;
   gchar buf[16];
   gchar *args[4] = { "gdb", NULL, NULL, NULL };
@@ -168,7 +196,7 @@ stack_trace_sigchld (int signum)
 static void
 stack_trace (char **args)
 {
-#ifndef NATIVE_WIN32
+#ifdef G_OS_UNIX
   pid_t pid;
   int in_fd[2];
   int out_fd[2];