int byteswap(const char* filename){ int ERROR = 1; FILE* f = NULL; unsigned long recordsize = 2; uint8_t* buf = NULL; size_t buffersize = 0; size_t buffersize_min = 8192; // // Figure out how big the buffer should be // buffersize = ((size_t)(recordsize)); std::cout << buffersize; if(buffersize < buffersize_min) { buffersize = buffersize_min - (buffersize_min % ((size_t)(recordsize))); } // // Allocate buffer // //buf = static_cast(malloc(buffersize)); //That's a C++ Fix buf = malloc(buffersize); //C code if(!buf) { printf("Error: Out of memoryn"); return ERROR; } f = fopen(filename, "r+b"); if(!f) { return ERROR; } for(;;) { size_t rec; size_t size; // // Read // clearerr(f); size = fread(buf, 1, buffersize, f); if(size == 0) { // Check for error if(ferror(f)) { return ERROR; } // Otherwise, done break; } // // Seek backwards // if(fseek(f, -((off_t)size), SEEK_CUR) != 0) { return ERROR; } if(size > buffersize) { size = buffersize; } if(size < buffersize) { // // Round up to the next record, filling with zeroes as we go // size_t extra = size % recordsize; if(extra) { for(; extra < recordsize; extra++) { buf[size++] = 0; } } } // // Reverse each record in memory // for(rec = 0; rec < size; rec += recordsize) { size_t a = rec; size_t b = rec + recordsize - 1; for(; a < b; a++, b--) { uint8_t t = buf[a]; buf[a] = buf[b]; buf[b] = t; } } // // Write // if(fwrite(buf, 1, size, f) != size) { return ERROR; } fflush(f); } printf("%s: Donen", filename); if(f != NULL) { fclose(f); } return 0; }