uboot/include/search.h
<<
>>
Prefs
   1/*
   2 * Declarations for System V style searching functions.
   3 * Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
   4 * This file is part of the GNU C Library.
   5 *
   6 * The GNU C Library is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU Lesser General Public
   8 * License as published by the Free Software Foundation; either
   9 * version 2.1 of the License, or (at your option) any later version.
  10 *
  11 * The GNU C Library is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14 * Lesser General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU Lesser General Public
  17 * License along with the GNU C Library; if not, write to the Free
  18 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  19 * 02111-1307 USA.
  20 */
  21
  22/*
  23 * Based on code from uClibc-0.9.30.3
  24 * Extensions for use within U-Boot
  25 * Copyright (C) 2010 Wolfgang Denk <wd@denx.de>
  26 */
  27
  28#ifndef _SEARCH_H
  29#define _SEARCH_H 1
  30
  31#include <stddef.h>
  32
  33#define __set_errno(val) do { errno = val; } while (0)
  34
  35/*
  36 * Prototype structure for a linked-list data structure.
  37 * This is the type used by the `insque' and `remque' functions.
  38 */
  39
  40/* For use with hsearch(3).  */
  41typedef int (*__compar_fn_t) (__const void *, __const void *);
  42typedef __compar_fn_t comparison_fn_t;
  43
  44/* Action which shall be performed in the call the hsearch.  */
  45typedef enum {
  46        FIND,
  47        ENTER
  48} ACTION;
  49
  50typedef struct entry {
  51        char *key;
  52        char *data;
  53} ENTRY;
  54
  55/* Opaque type for internal use.  */
  56struct _ENTRY;
  57
  58/*
  59 * Family of hash table handling functions.  The functions also
  60 * have reentrant counterparts ending with _r.  The non-reentrant
  61 * functions all work on a signle internal hashing table.
  62 */
  63
  64/* Data type for reentrant functions.  */
  65struct hsearch_data {
  66        struct _ENTRY *table;
  67        unsigned int size;
  68        unsigned int filled;
  69};
  70
  71/* Create a new hashing table which will at most contain NEL elements.  */
  72extern int hcreate(size_t __nel);
  73extern int hcreate_r(size_t __nel, struct hsearch_data *__htab);
  74
  75/* Destroy current internal hashing table.  */
  76extern void hdestroy(void);
  77extern void hdestroy_r(struct hsearch_data *__htab);
  78
  79/*
  80 * Search for entry matching ITEM.key in internal hash table.  If
  81 * ACTION is `FIND' return found entry or signal error by returning
  82 * NULL.  If ACTION is `ENTER' replace existing data (if any) with
  83 * ITEM.data.
  84 * */
  85extern ENTRY *hsearch(ENTRY __item, ACTION __action);
  86extern int hsearch_r(ENTRY __item, ACTION __action, ENTRY ** __retval,
  87                     struct hsearch_data *__htab);
  88
  89/* Search and delete entry matching ITEM.key in internal hash table. */
  90extern int hdelete(const char *__key);
  91extern int hdelete_r(const char *__key, struct hsearch_data *__htab);
  92
  93extern ssize_t hexport(const char __sep, char **__resp, size_t __size);
  94extern ssize_t hexport_r(struct hsearch_data *__htab,
  95                     const char __sep, char **__resp, size_t __size);
  96
  97extern int himport(const char *__env, size_t __size, const char __sep,
  98                   int __flag);
  99extern int himport_r(struct hsearch_data *__htab,
 100                     const char *__env, size_t __size, const char __sep,
 101                     int __flag);
 102
 103/* Flags for himport() / himport_r() */
 104#define H_NOCLEAR       1       /* do not clear hash table before importing */
 105
 106#endif /* search.h */
 107