atexit.3.patch   [plain text]


--- atexit.3.orig	2009-05-12 11:21:33.000000000 -0700
+++ atexit.3	2009-05-20 14:13:00.000000000 -0700
@@ -36,46 +36,69 @@
 .\"     @(#)atexit.3	8.1 (Berkeley) 6/4/93
 .\" $FreeBSD: src/lib/libc/stdlib/atexit.3,v 1.10 2002/12/18 13:33:03 ru Exp $
 .\"
-.Dd September 6, 2002
+.Dd May 20, 2008
 .Dt ATEXIT 3
 .Os
 .Sh NAME
 .Nm atexit
 .Nd register a function to be called on exit
-.Sh LIBRARY
-.Lb libc
 .Sh SYNOPSIS
 .In stdlib.h
 .Ft int
-.Fn atexit "void (*function)(void)"
+.Fn atexit "void (*func)(void)"
+#ifdef UNIFDEF_BLOCKS
+.Ft int
+.Fn atexit_b "void (^block)(void)"
+#endif
 .Sh DESCRIPTION
 The
 .Fn atexit
 function
-registers the given
-.Fa function
+registers the function
+.Fa func
 to be called at program exit, whether via
 .Xr exit 3
 or via return from the program's
 .Fn main .
 Functions so registered are called in reverse order;
 no arguments are passed.
+#ifdef UNIFDEF_BLOCKS
+.Pp
+The
+.Fn atexit_b
+function is like
+.Fn atexit
+except the callback is a block pointer instead of a function pointer.
+.Bd -ragged -offset indent
+Note: The
+.Fn Block_copy
+function (defined in
+.In Blocks.h )
+is used by
+.Fn atexit_b
+to make a copy of the block, especially for the case when a stack-based
+block might go out of scope when the subroutine returns.
+.Ed
+#endif
 .Pp
-These functions must not call
+These callbacks must not call
 .Fn exit ;
 if it should be necessary to terminate the process while in such a
 function, the
 .Xr _exit 2
 function should be used.
-(Alternatively, the function may cause abnormal
+(Alternatively, the callbacks may cause abnormal
 process termination, for example by calling
 .Xr abort 3 . )
 .Pp
-At least 32 functions can always be registered,
-and more are allowed as long as sufficient memory can be allocated.
+At least 32 callbacks can always be registered;
+more are allowed as long as sufficient memory can be allocated.
 .\" XXX {ATEXIT_MAX} is not implemented yet
 .Sh RETURN VALUES
-.Rv -std atexit
+#ifdef UNIFDEF_BLOCKS
+.ds ATEXIT_B atexit_b
+#endif
+.Rv -std atexit \*[ATEXIT_B]
 .Sh ERRORS
 .Bl -tag -width Er
 .It Bq Er ENOMEM