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/* Action which shall be performed in the call the hsearch.  */
  36typedef enum {
  37        FIND,
  38        ENTER
  39} ACTION;
  40
  41typedef struct entry {
  42        char *key;
  43        char *data;
  44} ENTRY;
  45
  46/* Opaque type for internal use.  */
  47struct _ENTRY;
  48
  49/*
  50 * Family of hash table handling functions.  The functions also
  51 * have reentrant counterparts ending with _r.  The non-reentrant
  52 * functions all work on a signle internal hashing table.
  53 */
  54
  55/* Data type for reentrant functions.  */
  56struct hsearch_data {
  57        struct _ENTRY *table;
  58        unsigned int size;
  59        unsigned int filled;
  60};
  61
  62/* Create a new hashing table which will at most contain NEL elements.  */
  63extern int hcreate_r(size_t __nel, struct hsearch_data *__htab);
  64
  65/* Destroy current internal hashing table.  */
  66extern void hdestroy_r(struct hsearch_data *__htab);
  67
  68/*
  69 * Search for entry matching ITEM.key in internal hash table.  If
  70 * ACTION is `FIND' return found entry or signal error by returning
  71 * NULL.  If ACTION is `ENTER' replace existing data (if any) with
  72 * ITEM.data.
  73 * */
  74extern int hsearch_r(ENTRY __item, ACTION __action, ENTRY ** __retval,
  75                     struct hsearch_data *__htab);
  76
  77/*
  78 * Search for an entry matching `MATCH'.  Otherwise, Same semantics
  79 * as hsearch_r().
  80 */
  81extern int hmatch_r(const char *__match, int __last_idx, ENTRY ** __retval,
  82                    struct hsearch_data *__htab);
  83/*
  84 * Search for an entry whose key or data contains `MATCH'.  Otherwise,
  85 * Same semantics as hsearch_r().
  86 */
  87extern int hstrstr_r(const char *__match, int __last_idx, ENTRY ** __retval,
  88                    struct hsearch_data *__htab);
  89
  90/* Search and delete entry matching ITEM.key in internal hash table. */
  91extern int hdelete_r(const char *__key, struct hsearch_data *__htab);
  92
  93extern ssize_t hexport_r(struct hsearch_data *__htab,
  94                     const char __sep, char **__resp, size_t __size);
  95
  96extern int himport_r(struct hsearch_data *__htab,
  97                     const char *__env, size_t __size, const char __sep,
  98                     int __flag);
  99
 100/* Flags for himport_r() */
 101#define H_NOCLEAR       1       /* do not clear hash table before importing */
 102
 103#endif /* search.h */
 104