19 #include <grass/gis.h> 20 #include "local_proto.h" 43 if (n == SEG->scb[SEG->cur].n)
48 if (SEG->load_idx[n] >= 0) {
49 cur = SEG->load_idx[n];
51 if (SEG->scb[cur].age != SEG->youngest) {
53 SEG->scb[cur].age->younger->older = SEG->scb[cur].age->older;
54 SEG->scb[cur].age->older->younger = SEG->scb[cur].age->younger;
56 SEG->scb[cur].age->younger = SEG->youngest->younger;
57 SEG->scb[cur].age->older = SEG->youngest;
58 SEG->scb[cur].age->older->younger = SEG->scb[cur].age;
59 SEG->scb[cur].age->younger->older = SEG->scb[cur].age;
61 SEG->youngest = SEG->scb[cur].age;
64 return SEG->cur = cur;
68 if (!SEG->nfreeslots) {
70 SEG->oldest = SEG->oldest->younger;
71 cur = SEG->oldest->cur;
72 SEG->oldest->cur = -1;
75 if (SEG->scb[cur].n >= 0) {
76 SEG->load_idx[SEG->scb[cur].n] = -1;
79 if (SEG->scb[cur].dirty) {
87 cur = SEG->freeslot[--SEG->nfreeslots];
92 SEG->scb[cur].dirty = 0;
93 SEG->seek(SEG, SEG->scb[cur].n, 0);
95 read_result = read(SEG->fd, SEG->scb[cur].buf, SEG->size);
97 if (read_result == 0) {
101 G_debug(1,
"Segment pagein: zero read");
102 memset(SEG->scb[cur].buf, 0, SEG->size);
104 else if (read_result != SEG->size) {
105 G_debug(2,
"Segment pagein: read_result=%d SEG->size=%d",
106 read_result, SEG->size);
109 G_warning(
"Segment pagein: %s", strerror(errno));
112 (
"Segment pagein: short count during read(), got %d, expected %d",
113 read_result, SEG->size);
119 SEG->load_idx[n] = cur;
122 SEG->youngest = SEG->youngest->younger;
123 SEG->scb[cur].age = SEG->youngest;
124 SEG->youngest->cur = cur;
126 return SEG->cur = cur;
int G_debug(int level, const char *msg,...)
Print debugging message.
int seg_pagein(SEGMENT *SEG, int n)
Internal use only.
int seg_pageout(SEGMENT *SEG, int i)
Internal use only.
void G_warning(const char *msg,...)
Print a warning message to stderr.