chiark / gitweb /
fishdescriptor: cast __errno_location correctly
[chiark-utils.git] / fishdescriptor / py / fishdescriptor / indonor.py
index c538baa846372d67f47db1b55680c7567bea973e..e227fb24b53a7a538ae6827a662f6ce9e7cbb0a2 100644 (file)
@@ -1,6 +1,27 @@
 
+# This file is part of chiark-utils, a collection of useful programs
+# used on chiark.greenend.org.uk.
+#
+# This file is:
+#  Copyright 2018 Citrix Systems Ltd
+#
+# This 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 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, consult the Free Software Foundation's
+# website at www.fsf.org, or the GNU Project website at www.gnu.org.
+
 # class for use inside gdb which is debugging the donor process
 
+from __future__ import print_function
+
 import gdb
 import copy
 import os
@@ -121,7 +142,7 @@ class DonorImplementation():
         # in my browser).  Also the error is very nonspecific :-/.
         # This seems to happen on jessie, and is fixed in stretch.
         # Anyway:
-        return parse_eval(expr_pat % '(*((int (*)(void))__errno_location)())')
+        return parse_eval(expr_pat % '(*((int*(*)(void))__errno_location)())')
 
     # calling functions (need to cast the function name to the right
     # type in case maybe gdb doesn't know the type)
@@ -260,6 +281,9 @@ class DonorImplementation():
         return input
 
     def eval_loop(di):
+        if not gdb.selected_inferior().was_attached:
+            print('gdb inferior not attached', file=sys.stderr)
+            sys.exit(0)
         while True:
             di._result('!\n')
             cmd = di._protocol_read()