18 #include <grass/gis.h>
19 #include "local_proto.h"
40 if (n == SEG->scb[SEG->cur].n)
45 if (SEG->load_idx[n] >= 0) {
46 cur = SEG->load_idx[n];
48 if (SEG->scb[cur].age != SEG->youngest) {
50 SEG->scb[cur].age->younger->older = SEG->scb[cur].age->older;
51 SEG->scb[cur].age->older->younger = SEG->scb[cur].age->younger;
53 SEG->scb[cur].age->younger = SEG->youngest->younger;
54 SEG->scb[cur].age->older = SEG->youngest;
55 SEG->scb[cur].age->older->younger = SEG->scb[cur].age;
56 SEG->scb[cur].age->younger->older = SEG->scb[cur].age;
58 SEG->youngest = SEG->scb[cur].age;
61 return SEG->cur = cur;
65 if (!SEG->nfreeslots) {
67 SEG->oldest = SEG->oldest->younger;
68 cur = SEG->oldest->cur;
69 SEG->oldest->cur = -1;
72 if (SEG->scb[cur].n >= 0) {
73 SEG->load_idx[SEG->scb[cur].n] = -1;
76 if (SEG->scb[cur].dirty) {
84 cur = SEG->freeslot[--SEG->nfreeslots];
89 SEG->scb[cur].dirty = 0;
90 SEG->seek(SEG, SEG->scb[cur].n, 0);
92 read_result = read(SEG->fd, SEG->scb[cur].buf, SEG->size);
94 if (read_result == 0) {
98 G_debug(1,
"Segment pagein: zero read");
99 memset(SEG->scb[cur].buf, 0, SEG->size);
101 else if (read_result != SEG->size) {
102 G_debug(2,
"Segment pagein: read_result=%d SEG->size=%d", read_result,
106 G_warning(
"Segment pagein: %s", strerror(errno));
108 G_warning(
"Segment pagein: short count during read(), got %d, "
110 read_result, SEG->size);
116 SEG->load_idx[n] = cur;
119 SEG->youngest = SEG->youngest->younger;
120 SEG->scb[cur].age = SEG->youngest;
121 SEG->youngest->cur = cur;
123 return SEG->cur = cur;
int G_debug(int level, const char *msg,...)
Print debugging message.
void G_warning(const char *msg,...)
Print a warning message to stderr.
int seg_pagein(SEGMENT *SEG, int n)
Internal use only.
int seg_pageout(SEGMENT *SEG, int i)
Internal use only.