/* 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