int main(int argc, char** argv){ char str[256]; int print = 0; if(argc < 3){ printf("Usage : patchfirm.exe <patches_folder_path> <patch_path> <-v = verbose>\n"); exit(-1); } if(argc > 3) if(!strcmp(argv[3], "-v")) print = 1; listfiles(argv[1]); FILE* patch = fopen(argv[2], "wb"); if(!patch){ printf("No patch path specified!\n"); exit(-1); } fwrite(&npatch, 1, 4, patch); for(int i = 0; i < npatch; i++){ unsigned int off = 0, size = 0; sscanf(patch_name[i], "%08x.bin", &off); sprintf(str, "%s/%s", argv[1], patch_name[i]); FILE* fp = fopen(str, "rb"); fseek(fp, 0, 2); size = ftell(fp); rewind(fp); if(size > 0){ unsigned char* buf = (unsigned char*) malloc (size); fread(buf, 1, size, fp); fclose(fp); unsigned int pos = FirmAddr(off); fwrite(&pos, 1, 4, patch); fwrite(&size, 1, 4, patch); fwrite(buf, 1, size, patch); while((ftell(patch) % 4) != 0) fputc(0, patch); //Aligned 4 if(print) printf("Addr : %08X Size : %d\n", off, size); free(buf); } fclose(fp); } return 0; }
int main(int argc, char** argv) { int i; char str[256]; int print = 0; if(argc < 4) { printf("Usage : patchfirm.exe <patches_folder_path> <patch_path> <mode> <-v = verbose>\n"); exit(-1); } if(argc > 4) if(!strcmp(argv[4], "-v")) print = 1; listfiles(argv[1]); FILE* patch = fopen(argv[2], "wb"); if(!patch) { printf("No patch path specified!\n"); exit(-1); } firm_info info; switch(argv[3][0]) { case 'n': info = native_info; break; case 'a': info = agb_info; break; case 't': info = twl_info; break; default : info = native_info; break; } printf("cfwtool - generating : %s\n", info.name); fwrite(&npatch, 1, 4, patch); for(i = 0; i < npatch; i++) { unsigned int size = 0; sprintf(str, "%s/%s", argv[1], files[i].name); FILE* fp = fopen(str, "rb"); fseek(fp, 0, 2); size = ftell(fp); rewind(fp); if(size > 0) { unsigned char* buf = (unsigned char*) malloc (size); fread(buf, 1, size, fp); fclose(fp); unsigned int pos = FirmAddr(files[i].off, info); fwrite(&pos, 1, 4, patch); fwrite(&size, 1, 4, patch); fwrite(buf, 1, size, patch); while((ftell(patch) % 4) != 0) fputc(0, patch); //Aligned 4 if(print) printf("Addr : %08X Size : %d\n", files[i].off, size); free(buf); } else { fclose(fp); } } fclose(patch); return 0; }