MCPcopy Create free account
hub / github.com/XTXMarkets/ternfs / readFile

Function readFile

cpp/ktools/ternktools.cpp:128–267  ·  view source on GitHub ↗

Same as writeFile, but for reading.

Source from the content-addressed store, hash-verified

126
127// Same as writeFile, but for reading.
128static void readFile(int argc, const char** argv) {
129 ssize_t bufSize = -1; // if -1, all in one go
130 ssize_t begin = -1; // if -1, start of file
131 ssize_t end = -1; // if -1, end of file
132 bool useMmap = false;
133 bool mmapRandom = false;
134 bool backwards = false;
135 const char* filename = NULL;
136
137 for (int i = 0; i < argc; i++) {
138 if (std::string(argv[i]) == "-buf-size") {
139 if (i+1 >= argc) { badUsage("No argument after -buf-size"); } i++;
140 bufSize = strtoull(argv[i], NULL, 0);
141 if (bufSize == ULLONG_MAX) {
142 badUsage("Bad -buf-size: %d (%s)", errno, strerror(errno));
143 }
144 } else if (std::string(argv[i]) == "-begin") {
145 if (i+1 >= argc) { badUsage("No argument after -begin"); } i++;
146 begin = strtoull(argv[i], NULL, 0);
147 if (begin == ULLONG_MAX) {
148 badUsage("Bad -begin: %d (%s)", errno, strerror(errno));
149 }
150 } else if (std::string(argv[i]) == "-end") {
151 if (i+1 >= argc) { badUsage("No argument after -end"); } i++;
152 end = strtoull(argv[i], NULL, 0);
153 if (end == ULLONG_MAX) {
154 badUsage("Bad -end: %d (%s)", errno, strerror(errno));
155 }
156 } else if (std::string(argv[i]) == "-mmap") {
157 useMmap = true;
158 } else if (std::string(argv[i]) == "-random") {
159 mmapRandom = true;
160 } else if (std::string(argv[i]) == "-backwards") {
161 backwards = true;
162 } else {
163 if (filename != NULL) { badUsage("Filename already specified: %s", filename); }
164 filename = argv[i];
165 }
166 }
167
168 if (backwards && !useMmap) {
169 die("-backwards only works with -mmap for now");
170 }
171
172 size_t fileSize;
173 {
174 struct stat st;
175 if(stat(filename, &st) != 0) {
176 die("couldn't stat %s: %d (%s)", filename, errno, strerror(errno));
177 }
178 fileSize = st.st_size;
179 }
180
181 if (bufSize < 0) { bufSize = fileSize; }
182 if (begin < 0) { begin = 0; }
183 if (end < 0) { end = fileSize; }
184 if (end > fileSize) {
185 die("-end (%ld) exceeds file size (%lu)", end, fileSize);

Callers 1

mainFunction · 0.70

Calls 3

mmapClass · 0.85
nanosNowFunction · 0.85
statClass · 0.70

Tested by

no test coverage detected