Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement