]>
Commit | Line | Data |
---|---|---|
76bdc726 | 1 | /* Copyright (C) 2021-2023 Free Software Foundation, Inc. |
bb368aad VM |
2 | Contributed by Oracle. |
3 | ||
4 | This file is part of GNU Binutils. | |
5 | ||
6 | This program is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 3, or (at your option) | |
9 | any later version. | |
10 | ||
11 | This program is distributed in the hope that it will be useful, | |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with this program; if not, write to the Free Software | |
18 | Foundation, 51 Franklin Street - Fifth Floor, Boston, | |
19 | MA 02110-1301, USA. */ | |
20 | ||
21 | #include "config.h" | |
22 | #include "util.h" | |
23 | #include "DataStream.h" | |
24 | #include "debug.h" | |
25 | ||
26 | DataStream::DataStream (char *filename) : Data_window (filename) | |
27 | { | |
28 | set_span (0, -1); | |
29 | } | |
30 | ||
31 | DataStream::~DataStream () { } | |
32 | ||
33 | void | |
34 | DataStream::set_span (int64_t f_offset, int64_t sz) | |
35 | { | |
36 | span_offset = 0; | |
37 | span_fileoffset = f_offset; | |
38 | int64_t fsz = get_fsize (); | |
39 | span_size = sz == -1 ? fsz : sz; | |
40 | if (span_fileoffset >= fsz) | |
41 | span_fileoffset = fsz; | |
42 | if (span_size > fsz - span_fileoffset) | |
43 | span_size = fsz - span_fileoffset; | |
44 | } | |
45 | ||
46 | int64_t | |
47 | DataStream::read (void *buf, int64_t len) | |
48 | { | |
49 | if (len > span_size - span_offset) | |
50 | len = span_size - span_offset; | |
51 | int64_t off = span_offset + span_fileoffset; | |
52 | span_offset += len; | |
53 | get_data (off, len, buf); | |
54 | return len; | |
55 | } |