Alright, this is what I have now:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
main(int argc, char *argv[])
{
FILE* originalSave;
FILE* newSave;
long fileSize;
long finalSize;
uint32_t *buffer, result = 0;
int x;
char *originalSaveName = argv[1],
*newSaveName = malloc(strlen(argv[0]) + strlen("Wii64 Saves") + 1),
*chr,
*ext;
if(argv[1] == NULL)
{
puts("Error: no file provided. Quitting.");
system("PAUSE");
return(0);
}
ext = strrchr(originalSaveName,'.');
if((strcmp(ext, ".fla") != 0) && (strcmp(ext, ".sra") != 0))
{
puts("Error: invalid file type. Quitting.");
system("PAUSE");
return(0);
}
originalSave = fopen(argv[1], "rb");
if(originalSave == NULL)
{
printf("Error: could not open file: %s", originalSave);
return(1);
}
chr = strrchr(argv[0],'\\');
if(chr == NULL)
{
puts("Error: unable to find \"\\\" in arg[0]!");
}
strncpy(newSaveName, (char*)argv[0], chr-argv[0]+1);
chr = strrchr(argv[1],'\\');
if(chr == NULL)
{
puts("Error: unable to find \"\\\" in arg[1]!");
}
strcat(newSaveName, "Wii64 Saves");
strcat(newSaveName, chr);
newSave = fopen(newSaveName, "wb");
if(newSave == NULL)
{
printf("Error: could not open file: %s", newSave);
return(1);
}
fseek(originalSave, 0, SEEK_END);
fileSize = ftell(originalSave);
rewind(originalSave);
if (fileSize <= 32768)
finalSize = 32768;
else if (fileSize <= 131072)
finalSize = 131072;
else if (fileSize > 131072){
printf("Error: invalid save size: %d", fileSize/1024);
return 1;}
buffer = malloc(sizeof(uint32_t));
for (x = 0; x < fileSize/sizeof(uint32_t); x++)
{
fread(buffer, 1, sizeof(uint32_t), originalSave);
result = ((*buffer << 24) & 0xFF000000) |
((*buffer << 8) & 0x00FF0000) |
((*buffer >> 8) & 0x0000FF00) |
((*buffer >> 24) & 0x000000FF);
fwrite(&result, 1, sizeof(uint32_t), newSave);
}
result = 11111111;
for (x = 0; x < (finalSize-fileSize); x++)
{
fwrite(&result, 1, 1, newSave);
}
fclose(newSave);
fclose(originalSave);
free(buffer);
free(newSaveName);
return 0;
}