GRASS GIS 8 Programmer's Manual 8.3.2(2024)-exported
Loading...
Searching...
No Matches
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
44int 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 *msg,...)
Print a warning message to stderr.
Definition gis/error.c:203
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