Skip to content

Commit 40ff779

Browse files
author
Iain Bancarz
committed
Read header from C-style file descriptor
1 parent 01a3226 commit 40ff779

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

Sim.cpp

+23-22
Original file line numberDiff line numberDiff line change
@@ -54,27 +54,9 @@ void Sim::open(string fname)
5454
strcpy(f, fname.c_str());
5555
openLowLevel(f);
5656

57-
char buff[256];
58-
59-
errorMsg = "";
60-
6157
this->filename = fname;
6258
_openFile(fname);
63-
infile->get(buff,4);
64-
65-
if (strcmp(buff,"sim")) {
66-
throw("File " + filename + " has invalid header [" + buff + "]");
67-
}
68-
magic = buff;
69-
70-
this->filename = fname;
71-
// read SIM header
72-
infile->read((char*)&version,1);
73-
infile->read((char*)&sampleNameSize,2);
74-
infile->read((char*)&numSamples,4);
75-
infile->read((char*)&numProbes,4);
76-
infile->read((char*)&numChannels,1);
77-
infile->read((char*)&numberFormat,1);
59+
infile->seekg(HEADER_LENGTH);
7860

7961
// calculate and store record length
8062
switch (numberFormat) {
@@ -93,10 +75,29 @@ void Sim::open(string fname)
9375

9476
void Sim::openLowLevel(char *fname) {
9577
inFileRaw = fopen(fname, "r");
96-
fseek(inFileRaw, HEADER_LENGTH, 0);
78+
char *magicChars = (char *) calloc(4, sizeof(char));
79+
int size_t;
80+
size_t = fread(magicChars, 1, 3, inFileRaw);
81+
magic = string(magicChars);
82+
if (strcmp(magicChars, "sim") || size_t != 3) {
83+
throw("File " + string(fname) + " has invalid header ["
84+
+ string(magic) + "]");
85+
}
86+
size_t = fread(&version, 1, 1, inFileRaw);
87+
if (size_t != 1) throw("Error reading .sim file header version");
88+
size_t = fread(&sampleNameSize, 2, 1, inFileRaw);
89+
if (size_t != 1) throw("Error reading .sim file header name size");
90+
size_t = fread(&numSamples, 4, 1, inFileRaw);
91+
if (size_t != 1) throw("Error reading .sim file header samples");
92+
size_t = fread(&numProbes, 4, 1, inFileRaw);
93+
if (size_t != 1) throw("Error reading .sim file header probes");
94+
size_t = fread(&numChannels, 1, 1, inFileRaw);
95+
if (size_t != 1) throw("Error reading .sim file header channels");
96+
size_t = fread(&numberFormat, 1, 1, inFileRaw);
97+
if (size_t != 1) throw("Error reading .sim file header format");
98+
9799
if (ferror(inFileRaw)!=0) {
98-
cerr << "Error positioning low-level file stream to:" << fname << endl;
99-
exit(1);
100+
throw("Error reading header from .sim file: [" + string(fname) + "]");
100101
}
101102
}
102103

0 commit comments

Comments
 (0)