GRASS GIS 8 Programmer's Manual  8.5.0dev(2024)-d6dec75dd4
rowio/setup.c
Go to the documentation of this file.
1 /*!
2  \file rowio/setup.c
3 
4  \brief RowIO library - Setup
5 
6  (C) 2001-2009 by the GRASS Development Team
7 
8  This program is free software under the GNU General Public License
9  (>=v2). Read the file COPYING that comes with GRASS for details.
10 
11  \author Original author CERL
12  */
13 
14 #include <stdio.h>
15 #include <stdlib.h>
16 #include <grass/gis.h>
17 #include <grass/glocale.h>
18 #include <grass/rowio.h>
19 
20 /*!
21  * \brief Configure rowio structure
22  *
23  * Rowio_setup() initializes the ROWIO structure <i>r</i> and
24  * allocates the required memory buffers. The file descriptor
25  * <i>fd</i> must be open for reading. The number of rows to be held
26  * in memory is <i>nrows</i>. The length in bytes of each row is
27  * <i>len</i>. The routine which will be called to read data from the
28  * file is getrow() and must be provided by the programmer. If the
29  * application requires that the rows be written back into the file if
30  * changed, the file descriptor <i>fd</i> must be open for write as
31  * well, and the programmer must provide a putrow() routine to write
32  * the data into the file. If no writing of the file is to occur,
33  * specify NULL for putrow().
34  *
35  * \param R pointer to ROWIO structure
36  * \param fd file descriptor
37  * \param nrows number of rows
38  * \param getrow get row function
39  *
40  * \return 1 on success
41  * \return -1 no memory
42  */
43 
44 int Rowio_setup(ROWIO *R, int fd, int nrows, int len,
45  int (*getrow)(int, void *, int, int),
46  int (*putrow)(int, const void *, int, int))
47 {
48  int i;
49 
50  R->getrow = getrow;
51  R->putrow = putrow;
52  R->nrows = nrows;
53  R->len = len;
54  R->cur = -1;
55  R->buf = NULL;
56  R->fd = fd;
57 
58  R->rcb = (struct ROWIO_RCB *)G_malloc(nrows * sizeof(struct ROWIO_RCB));
59  if (R->rcb == NULL) {
60  G_warning(_("Out of memory"));
61  return -1;
62  }
63  for (i = 0; i < nrows; i++) {
64  R->rcb[i].buf = G_malloc(len);
65  if (R->rcb[i].buf == NULL) {
66  G_warning(_("Out of memory"));
67  return -1;
68  }
69  R->rcb[i].row = -1; /* mark not used */
70  }
71  return 1;
72 }
#define NULL
Definition: ccmath.h:32
void G_warning(const char *,...) __attribute__((format(printf
#define G_malloc(n)
Definition: defs/gis.h:94
#define _(str)
Definition: glocale.h:10
int Rowio_setup(ROWIO *R, int fd, int nrows, int len, int(*getrow)(int, void *, int, int), int(*putrow)(int, const void *, int, int))
Configure rowio structure.
Definition: rowio/setup.c:44
void * buf
Definition: rowio.h:15
Definition: rowio.h:4
void * buf
Definition: rowio.h:9
int len
Definition: rowio.h:7
int(* getrow)(int, void *, int, int)
Definition: rowio.h:10
struct ROWIO::ROWIO_RCB * rcb
int fd
Definition: rowio.h:5
int(* putrow)(int, const void *, int, int)
Definition: rowio.h:11
int nrows
Definition: rowio.h:6
int cur
Definition: rowio.h:8