Lines Matching refs:map
153 struct map_struct *map;
155 if (!(map = new(struct map_struct)))
161 memset(map, 0, sizeof map[0]);
162 map->fd = fd;
163 map->file_size = len;
164 map->def_window_size = read_size;
166 return map;
171 char *map_ptr(struct map_struct *map, OFF_T offset, int32 len)
186 if (offset >= map->p_offset && offset+len <= map->p_offset+map->p_len)
187 return map->p + (offset - map->p_offset);
191 window_size = map->def_window_size;
192 if (window_start + window_size > map->file_size)
193 window_size = map->file_size - window_start;
198 if (window_size > map->p_size) {
199 map->p = realloc_array(map->p, char, window_size);
200 if (!map->p)
202 map->p_size = window_size;
207 if (window_start >= map->p_offset &&
208 window_start < map->p_offset + map->p_len &&
209 window_start + window_size >= map->p_offset + map->p_len) {
210 read_start = map->p_offset + map->p_len;
213 memmove(map->p, map->p + (map->p_len - read_offset), read_offset);
226 if (map->p_fd_offset != read_start) {
227 OFF_T ret = do_lseek(map->fd, read_start, SEEK_SET);
233 map->p_fd_offset = read_start;
235 map->p_offset = window_start;
236 map->p_len = window_size;
239 nread = read(map->fd, map->p + read_offset, read_size);
241 if (!map->status)
242 map->status = nread ? errno : ENODATA;
245 memset(map->p + read_offset, 0, read_size);
248 map->p_fd_offset += nread;
253 return map->p;
257 int unmap_file(struct map_struct *map)
261 if (map->p) {
262 free(map->p);
263 map->p = NULL;
265 ret = map->status;
266 memset(map, 0, sizeof map[0]);
267 free(map);