md5, sha1, sha256, sha512: add gl_SET_CRYPTO_CHECK_DEFAULT
[gnulib.git] / lib / search.in.h
index 6ab763d..f7b6828 100644 (file)
@@ -1,6 +1,6 @@
 /* A GNU-like <search.h>.
 
-   Copyright (C) 2007-2008 Free Software Foundation, Inc.
+   Copyright (C) 2007-2013 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
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifndef _GL_SEARCH_H
+#ifndef _@GUARD_PREFIX@_SEARCH_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
 
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_SEARCH_H@
 # @INCLUDE_NEXT@ @NEXT_SEARCH_H@
 #endif
 
-#ifndef _GL_SEARCH_H
-#define _GL_SEARCH_H
+#ifndef _@GUARD_PREFIX@_SEARCH_H
+#define _@GUARD_PREFIX@_SEARCH_H
 
 
-/* The definition of GL_LINK_WARNING is copied here.  */
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
 
+/* The definition of _GL_ARG_NONNULL is copied here.  */
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+/* The definition of _GL_WARN_ON_USE is copied here.  */
 
 
 #if @GNULIB_TSEARCH@
 # if @REPLACE_TSEARCH@
-#  define tsearch rpl_tsearch
-#  define tfind rpl_tfind
-#  define tdelete rpl_tdelete
-#  define twalk rpl_twalk
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define tsearch rpl_tsearch
+#   define tfind rpl_tfind
+#   define tdelete rpl_tdelete
+#   define twalk rpl_twalk
+#  endif
 # endif
-# if !@HAVE_TSEARCH@ || @REPLACE_TSEARCH@
 
 /* See <http://www.opengroup.org/susv3xbd/search.h.html>,
        <http://www.opengroup.org/susv3xsh/tsearch.html>
    for details.  */
 
-#  if !@HAVE_TSEARCH@
+# if !@HAVE_TSEARCH@
+#  if !GNULIB_defined_search_types
 typedef enum
 {
   preorder,
@@ -56,24 +62,94 @@ typedef enum
   leaf
 }
 VISIT;
+#   define GNULIB_defined_search_types 1
 #  endif
+# endif
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_search_fn_types
+typedef int (*_gl_search_compar_fn) (const void *, const void *);
+typedef void (*_gl_search_action_fn) (const void *, VISIT, int);
+#  define GNULIB_defined_search_fn_types 1
+# endif
+# ifdef __cplusplus
+}
+# endif
 
 /* Searches an element in the tree *VROOTP that compares equal to KEY.
    If one is found, it is returned.  Otherwise, a new element equal to KEY
    is inserted in the tree and is returned.  */
-extern void * tsearch (const void *key, void **vrootp,
-                      int (*compar) (const void *, const void *));
+# if @REPLACE_TSEARCH@
+_GL_FUNCDECL_RPL (tsearch, void *,
+                  (const void *key, void **vrootp,
+                   _gl_search_compar_fn compar)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (tsearch, void *,
+                  (const void *key, void **vrootp,
+                   _gl_search_compar_fn compar));
+# else
+#  if !@HAVE_TSEARCH@
+_GL_FUNCDECL_SYS (tsearch, void *,
+                  (const void *key, void **vrootp,
+                   _gl_search_compar_fn compar)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (tsearch, void *,
+                  (const void *key, void **vrootp,
+                   _gl_search_compar_fn compar));
+# endif
+_GL_CXXALIASWARN (tsearch);
 
 /* Searches an element in the tree *VROOTP that compares equal to KEY.
    If one is found, it is returned.  Otherwise, NULL is returned.  */
-extern void * tfind (const void *key, void *const *vrootp,
-                    int (*compar) (const void *, const void *));
+# if @REPLACE_TSEARCH@
+_GL_FUNCDECL_RPL (tfind, void *,
+                  (const void *key, void *const *vrootp,
+                   _gl_search_compar_fn compar)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (tfind, void *,
+                  (const void *key, void *const *vrootp,
+                   _gl_search_compar_fn compar));
+# else
+#  if !@HAVE_TSEARCH@
+_GL_FUNCDECL_SYS (tfind, void *,
+                  (const void *key, void *const *vrootp,
+                   _gl_search_compar_fn compar)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the second parameter is
+                                         void **vrootp.  */
+_GL_CXXALIAS_SYS_CAST (tfind, void *,
+                       (const void *key, void *const *vrootp,
+                        _gl_search_compar_fn compar));
+# endif
+_GL_CXXALIASWARN (tfind);
 
 /* Searches an element in the tree *VROOTP that compares equal to KEY.
    If one is found, it is removed from the tree, and its parent node is
    returned.  Otherwise, NULL is returned.  */
-extern void * tdelete (const void *key, void **vrootp,
-                      int (*compar) (const void *, const void *));
+# if @REPLACE_TSEARCH@
+_GL_FUNCDECL_RPL (tdelete, void *,
+                  (const void *key, void **vrootp,
+                   _gl_search_compar_fn compar)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (tdelete, void *,
+                  (const void *key, void **vrootp,
+                   _gl_search_compar_fn compar));
+# else
+#  if !@HAVE_TSEARCH@
+_GL_FUNCDECL_SYS (tdelete, void *,
+                  (const void *key, void **vrootp,
+                   _gl_search_compar_fn compar)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (tdelete, void *,
+                  (const void *key, void **vrootp,
+                   _gl_search_compar_fn compar));
+# endif
+_GL_CXXALIASWARN (tdelete);
 
 /* Perform a depth-first, left-to-right traversal of the tree VROOT.
    The ACTION function is called:
@@ -82,41 +158,50 @@ extern void * tdelete (const void *key, void **vrootp,
        and after the right subtree traversal,
      - for leaf nodes: once.
    The arguments passed to ACTION are:
-     1. the node; it can be casted to a 'const void * const *', i.e. into a
+     1. the node; it can be cast to a 'const void * const *', i.e. into a
         pointer to the key,
      2. an indicator which visit of the node this is,
      3. the level of the node in the tree (0 for the root).  */
-extern void twalk (const void *vroot,
-                  void (*action) (const void *, VISIT, int));
-
+# if @REPLACE_TSEARCH@
+_GL_FUNCDECL_RPL (twalk, void,
+                  (const void *vroot, _gl_search_action_fn action)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (twalk, void,
+                  (const void *vroot, _gl_search_action_fn action));
+# else
+#  if !@HAVE_TSEARCH@
+_GL_FUNCDECL_SYS (twalk, void,
+                  (const void *vroot, _gl_search_action_fn action)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (twalk, void,
+                  (const void *vroot, _gl_search_action_fn action));
 # endif
+_GL_CXXALIASWARN (twalk);
+
 #elif defined GNULIB_POSIXCHECK
 # undef tsearch
-# define tsearch(k,v,c) \
-    (GL_LINK_WARNING ("tsearch is unportable - " \
-                      "use gnulib module tsearch for portability"), \
-     tsearch (k, v, c))
+# if HAVE_RAW_DECL_TSEARCH
+_GL_WARN_ON_USE (tsearch, "tsearch is unportable - "
+                 "use gnulib module tsearch for portability");
+# endif
 # undef tfind
-# define tfind(k,v,c) \
-    (GL_LINK_WARNING ("tfind is unportable - " \
-                      "use gnulib module tsearch for portability"), \
-     tfind (k, v, c))
+# if HAVE_RAW_DECL_TFIND
+_GL_WARN_ON_USE (tfind, "tfind is unportable - "
+                 "use gnulib module tsearch for portability");
+# endif
 # undef tdelete
-# define tdelete(k,v,c) \
-    (GL_LINK_WARNING ("tdelete is unportable - " \
-                      "use gnulib module tsearch for portability"), \
-     tdelete (k, v, c))
+# if HAVE_RAW_DECL_TDELETE
+_GL_WARN_ON_USE (tdelete, "tdelete is unportable - "
+                 "use gnulib module tsearch for portability");
+# endif
 # undef twalk
-# define twalk(v,a) \
-    (GL_LINK_WARNING ("twalk is unportable - " \
-                      "use gnulib module tsearch for portability"), \
-     twalk (v, a))
+# if HAVE_RAW_DECL_TWALK
+_GL_WARN_ON_USE (twalk, "twalk is unportable - "
+                 "use gnulib module tsearch for portability");
+# endif
 #endif
 
 
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GL_SEARCH_H */
-#endif /* _GL_SEARCH_H */
+#endif /* _@GUARD_PREFIX@_SEARCH_H */
+#endif /* _@GUARD_PREFIX@_SEARCH_H */