Commit c6b3d0876cb291fbb063969a3e7734e51eee3b9f

Authored by Austin Blanton
2 parents 1dd60d3a 5f3f7490

Merge pull request #160 from biometrics/no_alloc

Alternative for #159, avoid some dynamic memory allocations
Showing 1 changed file with 12 additions and 11 deletions
openbr/plugins/stream.cpp
@@ -347,10 +347,11 @@ public: @@ -347,10 +347,11 @@ public:
347 } 347 }
348 348
349 // first 4 bytes store 0xEDFE, next 24 store 'Norpix seq ' 349 // first 4 bytes store 0xEDFE, next 24 store 'Norpix seq '
350 - char *firstFour = new char[4], *nextTwentyFour; 350 + char firstFour[4];
351 seqFile.seekg(0, ios::beg); 351 seqFile.seekg(0, ios::beg);
352 seqFile.read(firstFour, 4); 352 seqFile.read(firstFour, 4);
353 - nextTwentyFour = readText(24); 353 + char nextTwentyFour[24];
  354 + readText(24, nextTwentyFour);
354 if (firstFour[0] != (char)0xED || firstFour[1] != (char)0xFE || strncmp(nextTwentyFour, "Norpix seq", 10) != 0) { 355 if (firstFour[0] != (char)0xED || firstFour[1] != (char)0xFE || strncmp(nextTwentyFour, "Norpix seq", 10) != 0) {
355 qDebug("Invalid header in seq file"); 356 qDebug("Invalid header in seq file");
356 return false; 357 return false;
@@ -363,7 +364,8 @@ public: @@ -363,7 +364,8 @@ public:
363 qDebug("Invalid header size"); 364 qDebug("Invalid header size");
364 return false; 365 return false;
365 } 366 }
366 - char *desc = readText(512); 367 + char desc[512];
  368 + readText(512, desc);
367 basis.file.set("Description", QString(desc)); 369 basis.file.set("Description", QString(desc));
368 370
369 width = readInt(); 371 width = readInt();
@@ -414,9 +416,9 @@ public: @@ -414,9 +416,9 @@ public:
414 // but there might be 16 extra bytes instead of 8... 416 // but there might be 16 extra bytes instead of 8...
415 if (i == 1) { 417 if (i == 1) {
416 seqFile.seekg(s, ios::beg); 418 seqFile.seekg(s, ios::beg);
417 - char *zero = new char[1];  
418 - seqFile.read(zero, 1);  
419 - if (zero[0] == 0) { 419 + char zero;
  420 + seqFile.read(&zero, 1);
  421 + if (zero == 0) {
420 s += 8; 422 s += 8;
421 extra += 8; 423 extra += 8;
422 } 424 }
@@ -498,14 +500,13 @@ private: @@ -498,14 +500,13 @@ private:
498 // apparently the text in seq files is 16 bit characters (UTF-16?) 500 // apparently the text in seq files is 16 bit characters (UTF-16?)
499 // since we don't really need the last byte, snad since it gets interpreted as 501 // since we don't really need the last byte, snad since it gets interpreted as
500 // a terminating char, let's just grab the first byte for storage 502 // a terminating char, let's just grab the first byte for storage
501 - char* readText(int bytes) 503 + void readText(int bytes, char * buffer)
502 { 504 {
503 - char *text = new char[bytes], *ret = new char[bytes/2];  
504 - seqFile.read(text, bytes); 505 + seqFile.read(buffer, bytes);
505 for (int i=0; i<bytes; i+=2) { 506 for (int i=0; i<bytes; i+=2) {
506 - ret[i/2] = text[i]; 507 + buffer[i/2] = buffer[i];
507 } 508 }
508 - return ret; 509 + buffer[bytes/2] = '\0';
509 } 510 }
510 511
511 protected: 512 protected: