size_t in_index = 0;
// loop through the out_index to make sure we don't go too far
- for (size_t out_index=0; out_index < max_len-1; out_index++) {
+ for (size_t out_index=0; out_index < max_len; out_index++) {
// set character - (should be binary but verify it isn't more than 1 digit)
if (data[in_index]<10)
sprintf(tmp++, "%u", (unsigned int) data[in_index]);
// check if a line break is needed and we have room to print it in our array
- if ( (breaks > 0) && !((in_index+1) % breaks) && (out_index+1 != max_len) ) {
+ if ( (breaks > 0) && !((in_index+1) % breaks) && (out_index+1 < max_len) ) {
// increment and print line break
out_index++;
sprintf(tmp++, "%s","\n");
// a milliseconds timer for performance measurement
uint64_t msclock() {
#if defined(_WIN32)
-#include <sys/types.h>
- struct _timeb t;
- if (_ftime_s(&t)) {
- return 0;
- } else {
- return 1000 * t.time + t.millitm;
- }
+ #include <sys/types.h>
+
+ // WORKAROUND FOR MinGW (some versions - use if normal code does not compile)
+ // It has no _ftime_s and needs explicit inclusion of timeb.h
+ #include <sys/timeb.h>
+ struct _timeb t;
+ _ftime(&t);
+ return 1000 * t.time + t.millitm;
+
+ // NORMAL CODE (use _ftime_s)
+ //struct _timeb t;
+ //if (_ftime_s(&t)) {
+ // return 0;
+ //} else {
+ // return 1000 * t.time + t.millitm;
+ //}
#else
struct timespec t;
clock_gettime(CLOCK_MONOTONIC, &t);