@@ -54,27 +54,9 @@ void Sim::open(string fname)
54
54
strcpy (f, fname.c_str ());
55
55
openLowLevel (f);
56
56
57
- char buff[256 ];
58
-
59
- errorMsg = " " ;
60
-
61
57
this ->filename = fname;
62
58
_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);
78
60
79
61
// calculate and store record length
80
62
switch (numberFormat) {
@@ -93,10 +75,29 @@ void Sim::open(string fname)
93
75
94
76
void Sim::openLowLevel (char *fname) {
95
77
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
+
97
99
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) + " ]" );
100
101
}
101
102
}
102
103
0 commit comments