]> git.ipfire.org Git - thirdparty/bash.git/blobdiff - unwind_prot.h
updates for nofork command substitution; changes for z/OS machines; fix for race...
[thirdparty/bash.git] / unwind_prot.h
index eded96c87fdd2a039aa1aa43a3d05ec3d6875a4e..3236f2949db202069a6af44a11c82ec36c6c3749 100644 (file)
@@ -1,6 +1,6 @@
 /* unwind_prot.h - Macros and functions for hacking unwind protection. */
 
-/* Copyright (C) 1993-2008 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2023 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 #if !defined (_UNWIND_PROT_H)
 #define _UNWIND_PROT_H
 
+/* Generic function type void (*) (void *) for all unwind cleanups. A
+   cleanup function does not return a value and takes a single generic
+   pointer argument. This type works fine for arbitrary pointers; if a
+   cleanup function needs to take an int argument, it's passed through
+   a cast to intptr_t, an integer type that's safe to convert to and
+   from a pointer. */
+typedef void sh_uwfunc_t (void *);
+
+extern void uwp_init (void);
+
 /* Run a function without interrupts. */
-extern void begin_unwind_frame __P((char *));
-extern void discard_unwind_frame __P((char *));
-extern void run_unwind_frame __P((char *));
-extern void add_unwind_protect (); /* Not portable to arbitrary C99 hosts.  */
-extern void remove_unwind_protect __P((void));
-extern void run_unwind_protects __P((void));
-extern void clear_unwind_protect_list __P((int));
-extern int have_unwind_protects __P((void));
-extern void uwp_init __P((void));
+extern void begin_unwind_frame (char *);
+extern void discard_unwind_frame (char *);
+extern void run_unwind_frame (char *);
+extern void add_unwind_protect (sh_uwfunc_t *, void *);
+extern void remove_unwind_protect (void);
+extern void run_unwind_protects (void);
+extern void clear_unwind_protect_list (int);
+extern int have_unwind_protects (void);
+extern int unwind_protect_tag_on_stack (const char *);
 
 /* Define for people who like their code to look a certain way. */
 #define end_unwind_frame()
 
 /* How to protect a variable.  */
 #define unwind_protect_var(X) unwind_protect_mem ((char *)&(X), sizeof (X))
-extern void unwind_protect_mem __P((char *, int));
+
+extern void unwind_protect_mem (char *, int);
 
 /* Backwards compatibility */
 #define unwind_protect_int     unwind_protect_var