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<uint8_t *>(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;
}