source: trunk/third/gdbm/gdbmfetch.c @ 15372

Revision 15372, 2.6 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r15371, which included commits to RCS files with non-trunk default branches.
RevLine 
[15371]1/* gdbmfetch.c - Find a key and return the associated data.  */
2
3/*  This file is part of GDBM, the GNU data base manager, by Philip A. Nelson.
4    Copyright (C) 1990, 1991, 1993  Free Software Foundation, Inc.
5
6    GDBM is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2, or (at your option)
9    any later version.
10
11    GDBM 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
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with GDBM; see the file COPYING.  If not, write to
18    the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19
20    You may contact the author by:
21       e-mail:  phil@cs.wwu.edu
22      us-mail:  Philip A. Nelson
23                Computer Science Department
24                Western Washington University
25                Bellingham, WA 98226
26       
27*************************************************************************/
28
29
30/* include system configuration before all else. */
31#include "autoconf.h"
32
33#include "gdbmdefs.h"
34#include "gdbmerrno.h"
35
36/* Look up a given KEY and return the information associated with that KEY.
37   The pointer in the structure that is  returned is a pointer to dynamically
38   allocated memory block.  */
39
40datum
41gdbm_fetch (dbf, key)
42     gdbm_file_info *dbf;
43     datum key;
44{
45  datum  return_val;            /* The return value. */
46  int    elem_loc;              /* The location in the bucket. */
47  char  *find_data;             /* Returned from find_key. */
48  int    hash_val;              /* Returned from find_key. */
49
50  /* Set the default return value. */
51  return_val.dptr  = NULL;
52  return_val.dsize = 0;
53
54  /* Initialize the gdbm_errno variable. */
55  gdbm_errno = GDBM_NO_ERROR;
56
57  /* Find the key and return a pointer to the data. */
58  elem_loc = _gdbm_findkey (dbf, key, &find_data, &hash_val);
59
60  /* Copy the data if the key was found.  */
61  if (elem_loc >= 0)
62    {
63      /* This is the item.  Return the associated data. */
64      return_val.dsize = dbf->bucket->h_table[elem_loc].data_size;
65      if (return_val.dsize == 0)
66        return_val.dptr = (char *) malloc (1);
67      else
68        return_val.dptr = (char *) malloc (return_val.dsize);
69      if (return_val.dptr == NULL) _gdbm_fatal (dbf, "malloc error");
70      bcopy (find_data, return_val.dptr, return_val.dsize);
71    }
72
73  /* Check for an error and return. */
74  if (return_val.dptr == NULL) gdbm_errno = GDBM_ITEM_NOT_FOUND;
75  return return_val;
76}
Note: See TracBrowser for help on using the repository browser.