changeset 29970:80e68105bdda

Improve documentation.
author Bruno Haible <bruno@clisp.org>
date Sun, 20 Jul 2008 18:25:12 +0200
parents da551054d27d
children 692a981ba50c
files ChangeLog lib/c-stack.c lib/c-stack.h
diffstat 3 files changed, 30 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun Jul 20 13:43:28 2008 +0200
+++ b/ChangeLog	Sun Jul 20 18:25:12 2008 +0200
@@ -1,3 +1,8 @@
+2008-07-20  Bruno Haible  <bruno@clisp.org>
+
+	* lib/c-stack.h (c_stack_action): Add documentation.
+	* lib/c-stack.c (c_stack_action): Remove incomplete documentation.
+
 2008-07-20  Bruno Haible  <bruno@clisp.org>
 
 	* modules/canonicalize-lgpl (License): Relicense under LGPLv2+.
--- a/lib/c-stack.c	Sun Jul 20 13:43:28 2008 +0200
+++ b/lib/c-stack.c	Sun Jul 20 18:25:12 2008 +0200
@@ -189,21 +189,6 @@
   die ((!emergency || segv_handler_missing) ? 0 : SIGSEGV);
 }
 
-/* Set up ACTION so that it is invoked on C stack overflow.  Return -1
-   (setting errno) if this cannot be done.
-
-   When ACTION is called, it is passed an argument equal to SIGSEGV
-   for a segmentation violation that does not appear related to stack
-   overflow, and is passed zero otherwise.  On many platforms it is
-   hard to tell; when in doubt, zero is passed.
-
-   A null ACTION acts like an action that does nothing.
-
-   ACTION must be async-signal-safe.  ACTION together with its callees
-   must not require more than SIGSTKSZ bytes of stack space.  Also,
-   ACTION should not call longjmp, because this implementation does
-   not guarantee that it is safe to return to the original stack.  */
-
 int
 c_stack_action (void (*action) (int))
 {
@@ -298,21 +283,6 @@
 }
 # endif
 
-/* Set up ACTION so that it is invoked on C stack overflow.  Return -1
-   (setting errno) if this cannot be done.
-
-   When ACTION is called, it is passed an argument equal to SIGSEGV
-   for a segmentation violation that does not appear related to stack
-   overflow, and is passed zero otherwise.  On many platforms it is
-   hard to tell; when in doubt, zero is passed.
-
-   A null ACTION acts like an action that does nothing.
-
-   ACTION must be async-signal-safe.  ACTION together with its callees
-   must not require more than SIGSTKSZ bytes of stack space.  Also,
-   ACTION should not call longjmp, because this implementation does
-   not guarantee that it is safe to return to the original stack.  */
-
 int
 c_stack_action (void (*action) (int))
 {
--- a/lib/c-stack.h	Sun Jul 20 13:43:28 2008 +0200
+++ b/lib/c-stack.h	Sun Jul 20 18:25:12 2008 +0200
@@ -1,6 +1,6 @@
 /* Stack overflow handling.
 
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2008 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -15,4 +15,27 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-int c_stack_action (void (*) (int));
+
+/* Set up ACTION so that it is invoked on C stack overflow and on other,
+   stack-unrelated, segmentation violation.
+   Return -1 (setting errno) if this cannot be done.
+
+   When a stack overflow or segmentation violation occurs:
+   1) ACTION is called.  It is passed an argument equal to
+        - 0, for a stack overflow,
+        - SIGSEGV, for a segmentation violation that does not appear related
+          to stack overflow.
+      On many platforms the two cases are hard to distinguish; when in doubt,
+      zero is passed.
+   2) If ACTION returns, a message is written to standard error, and the
+      program is terminated: in the case of stack overflow, with exit code
+      exit_failure (see "exitfail.h"), otherwise through a signal SIGSEGV.
+
+   A null ACTION acts like an action that does nothing.
+
+   ACTION must be async-signal-safe.  ACTION together with its callees
+   must not require more than SIGSTKSZ bytes of stack space.  Also,
+   ACTION should not call longjmp, because this implementation does
+   not guarantee that it is safe to return to the original stack.  */
+
+extern int c_stack_action (void (* /*action*/) (int));