source: gsdl/tags/gsdl-2_26-distribution/gsdl/packages/wingdbm/gdbmfetch.c@ 14121

Last change on this file since 14121 was 18, checked in by sjboddie, 26 years ago

Added windows gdbm and mg versions

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line 
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: [email protected]
22 us-mail: Philip A. Nelson
23 Computer Science Department
24 Western Washington University
25 Bellingham, WA 98226
26
27*************************************************************************/
28
29
30/* AIX demands this be the very first thing in the file. */
31#if !defined(__GNUC__) && defined(_AIX)
32 #pragma alloca
33#endif
34
35/* include system configuration before all else. */
36#include "autoconf.h"
37
38#include "gdbmdefs.h"
39#include "gdbmerrno.h"
40
41/* Look up a given KEY and return the information associated with that KEY.
42 The pointer in the structure that is returned is a pointer to dynamically
43 allocated memory block. */
44
45datum
46gdbm_fetch (dbf, key)
47 gdbm_file_info *dbf;
48 datum key;
49{
50 datum return_val; /* The return value. */
51 int elem_loc; /* The location in the bucket. */
52 char *find_data; /* Returned from find_key. */
53 word_t hash_val; /* Returned from find_key. */
54
55 /* Set the default return value. */
56 return_val.dptr = NULL;
57 return_val.dsize = 0;
58
59 /* Initialize the gdbm_errno variable. */
60 gdbm_errno = GDBM_NO_ERROR;
61
62 /* Find the key and return a pointer to the data. */
63 elem_loc = _gdbm_findkey (dbf, key, &find_data, &hash_val);
64
65 /* Copy the data if the key was found. */
66 if (elem_loc >= 0)
67 {
68 /* This is the item. Return the associated data. */
69 return_val.dsize = dbf->bucket->h_table[elem_loc].data_size;
70 if (return_val.dsize == 0)
71 return_val.dptr = (char *) malloc (1);
72 else
73 return_val.dptr = (char *) malloc (return_val.dsize);
74 if (return_val.dptr == NULL) _gdbm_fatal (dbf, "malloc error");
75 bcopy (find_data, return_val.dptr, return_val.dsize);
76 }
77
78 /* Check for an error and return. */
79 if (return_val.dptr == NULL) gdbm_errno = GDBM_ITEM_NOT_FOUND;
80 return return_val;
81}
Note: See TracBrowser for help on using the repository browser.