void DataBase::applyGlossario(const QString& nomefile){ QFile file(nomefile); if(!file.open(QIODevice::ReadWrite)) {return; throw Ecc_FileNotFound;} QString text(file.readAll()); text.replace(QString("\\ped{g}"),QString("")); file.resize(0); // go to the beginning of the file file.write(text.toUtf8()); // write the new text back to the file file.close(); QMap<QString, Lemma*>::const_iterator it=db.begin(); for (;it!=db.end();++it){ replaceFile(nomefile, it.value()->getWord()); std::vector<QString>::const_iterator i=it.value()->getPlural().begin(); for(; i!=it.value()->getPlural().end();++i){ replaceFile(nomefile, *i); } } }
int main (int argc, char **argv) { // start flags declarations... gDataOffset = 0; //globally declared in GCMutils.h; Must be initialized before use... int hexFlag = 0; //for extracting: char *extractFileFrom = NULL; char *extractFileTo = NULL; char *fsReplacePath = NULL; verboseFlag = 0; int showInfoFlag = 1; int extractDiskHeaderFlag = 0; char *extractDiskHeaderFile = GCM_DISK_HEADER_FILENAME; int extractDiskHeaderInfoFlag = 0; char *extractDiskHeaderInfoFile = GCM_DISK_HEADER_INFO_FILENAME; int extractApploaderFlag = 0; char *extractApploaderFile = GCM_APPLOADER_FILENAME; int extractBootDolFlag = 0; char *extractBootDolFile = GCM_BOOT_DOL_FILENAME; int injectDiskHeaderFlag = 0; char *injectDiskHeaderFile = GCM_DISK_HEADER_FILENAME; int injectDiskHeaderInfoFlag = 0; char *injectDiskHeaderInfoFile = GCM_DISK_HEADER_INFO_FILENAME; int injectApploaderFlag = 0; char *injectApploaderFile = GCM_APPLOADER_FILENAME; char *replaceFileLocalPath = NULL; char *replaceFileGCMPath = NULL; int listFilesFlag = 0; listInfoFlag = 0; listPathFlag = 0; // end flag declarations //start argument parsing... char *currentArg = NULL; do { currentArg = GET_NEXT_ARG; if (!currentArg) { //there's no args! uh oh! //printf("No arguments...\n"); printUsage(); exit(0); } else if (CHECK_ARG(ARG_VERBOSE)) { //turn on verbosity! verboseFlag++; verbosePrint("Verbose output ON."); } else if (CHECK_ARG(ARG_HELP)) { // print extended help printExtendedUsage(); exit(0); } else if (CHECK_ARG(ARG_INFO)) { //they want to see info... showInfoFlag++; verbosePrint("Show info flag ON."); } else if (CHECK_ARG(ARG_HEX)) { //they want hex notation... hexFlag = 1; verbosePrint("Hex notation ON."); } else if (CHECK_ARG(ARG_OFFSET)) { //change the data offset gDataOffset = strtoul(GET_NEXT_ARG, NULL, 0); char verboseMsg[32] = ""; sprintf(verboseMsg, "Data offset changed to: %d", gDataOffset); verbosePrint(verboseMsg); } else if (CHECK_ARG(ARG_REPLACE_FILESYSTEM)) { // they want to replace the filesystem fsReplacePath = GET_NEXT_ARG; if (!fsReplacePath) { printf("Argument error...\n"); printUsage(); exit(1); } } else if (CHECK_ARG(ARG_EXTRACT)) { // extract files... // usage: -e <path> <destPath> extractFileFrom = GET_NEXT_ARG; extractFileTo = GET_NEXT_ARG; if (!extractFileFrom || !extractFileTo) { //argument error... something was omitted... printf("Argument error.\n"); printUsage(); exit(1); } } else if (CHECK_ARG(ARG_EXTRACT_DISK_HEADER)) { // extract disk header... (to a file called "boot.bin") extractDiskHeaderFlag++; if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) { // if they're specifying a file... SKIP_NARG(1); //skip that -f we just looked at... extractDiskHeaderFile = GET_NEXT_ARG; } } else if (CHECK_ARG(ARG_EXTRACT_DISK_HEADER_INFO)) { // extract disk header info... (to a file called "bi2.bin") extractDiskHeaderInfoFlag++; if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) { // if they're specifying a file... SKIP_NARG(1); //skip that -f we just looked at... extractDiskHeaderInfoFile = GET_NEXT_ARG; } } else if (CHECK_ARG(ARG_EXTRACT_APPLOADER)) { //extract apploader... (to a file called "appldr.bin") extractApploaderFlag++; if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) { // if they're specifying a file... SKIP_NARG(1); //skip that -f we just looked at... extractApploaderFile = GET_NEXT_ARG; } } else if (CHECK_ARG(ARG_EXTRACT_BOOT_DOL)) { //extract the boot dol... extractBootDolFlag++; if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) { //if they specify a file... SKIP_NARG(1); //skip that -f extractBootDolFile = GET_NEXT_ARG; } } else if (CHECK_ARG(ARG_INJECT_DISK_HEADER)) { //inject the diskheader injectDiskHeaderFlag++; if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) { //if they're specifying a file... (otherwise use the default); SKIP_NARG(1); //skip the -f we just looked at... injectDiskHeaderFile = GET_NEXT_ARG; } } else if (CHECK_ARG(ARG_INJECT_DISK_HEADER_INFO)) { //inject the diskheaderinfo... injectDiskHeaderInfoFlag++; if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) { // if they're specifying a file... SKIP_NARG(1); injectDiskHeaderInfoFile = GET_NEXT_ARG; } } else if (CHECK_ARG(ARG_INJECT_APPLOADER)) { //inject the apploader... injectApploaderFlag++; if (PEEK_ARG && strcmp(PEEK_ARG, OPT_FILE) == 0) { //if they're specifying a file... SKIP_NARG(1); injectApploaderFile = GET_NEXT_ARG; } } else if (CHECK_ARG(ARG_REPLACE_FILE)) { //they want to replace a file... replaceFileGCMPath = GET_NEXT_ARG; replaceFileLocalPath = GET_NEXT_ARG; if (!replaceFileGCMPath || !replaceFileLocalPath) { printf("Argument error!\n"); printUsage(); exit(1); } } else if (CHECK_ARG(ARG_LIST)) { // list filesystem listFilesFlag++; //turn the listFiles flag on. while(1) { if (PEEK_ARG && (strcmp(PEEK_ARG, OPT_FILE_INFO) == 0 || strcmp(PEEK_ARG, OPT_FILE_INFO_SYN) == 0)) { SKIP_NARG(1); listInfoFlag++; } else if (PEEK_ARG && (strcmp(PEEK_ARG, OPT_FULL_PATH) == 0 || strcmp(PEEK_ARG, OPT_FULL_PATH_SYN) == 0)) { SKIP_NARG(1); listPathFlag++; } else { break; } } } else { // do it to this file... this is the last argument... just ignore the rest... filepath = currentArg; filename = lastPathComponent(filepath); break; } } while(*argv); //end parsing arguments... //open the file for reading and start doing read operations! openFile("r"); // print the info... if (showInfoFlag) { printGCMInfo(hexFlag); } // list the files, if necesary... if (listFilesFlag) { listFiles(); } // extract files... if (extractFileFrom && extractFileTo) { //testing recursive extraction... GCMFileEntryStruct *e = NULL; if (strcmp(extractFileFrom, "/") == 0) { e = GCMGetRootFileEntry(gcmFile); printf("root file entry index: %d\n", e->index); } else { e = GCMGetFileEntryAtPath(gcmFile, extractFileFrom); } strcpy(extractRootPath, extractFileTo); recurseFileEntry(e, extractFileEntry); free(e); //extractFile(extractFileFrom, extractFileTo); } //extract diskheader if (extractDiskHeaderFlag) { extractDiskHeader(extractDiskHeaderFile); } //extract diskheaderinfo if (extractDiskHeaderInfoFlag) { extractDiskHeaderInfo(extractDiskHeaderInfoFile); } //extract apploader if (extractApploaderFlag) { extractApploader(extractApploaderFile); } //extract main executable DOL if (extractBootDolFlag) { extractBootDol(extractBootDolFile); } //close the file and open it again for read/write closeFile(); openFile("r+"); //inject the diskheader if (injectDiskHeaderFlag) { injectDiskHeader(injectDiskHeaderFile); } //inject the diskheaderinfo if (injectDiskHeaderInfoFlag) { injectDiskHeaderInfo(injectDiskHeaderInfoFile); } //inject the apploader if (injectApploaderFlag) { injectApploader(injectApploaderFile); } if (replaceFileLocalPath && replaceFileGCMPath) { replaceFile(replaceFileGCMPath, replaceFileLocalPath); } //replace the filesystem if (fsReplacePath) { GCMReplaceFilesystem(gcmFile, fsReplacePath); } closeFile(); return 0; }
bool processFile(const char *path) { HANDLE hfile = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hfile == INVALID_HANDLE_VALUE) return false; SetFilePointer(tempfile, 0, NULL, FILE_BEGIN); static char inbuf[NLF_BUFSIZE]; static char outbuf[NLF_BUFSIZE]; DWORD bytes; DWORD pos = 0; while (true) { if (!ReadFile(hfile, inbuf, NLF_BUFSIZE, &bytes, NULL)) goto reading_failed; if (bytes < NLF_BUFSIZE) break; if (!writeBuffer(inbuf, outbuf, bytes, &pos, false)) goto reading_failed; } if (bytes != 0 || pos != 0) { if (!writeBuffer(inbuf, outbuf, bytes, &pos, true)) goto reading_failed; } /*if (SetFilePointer(hfile, 0, NULL, FILE_CURRENT) == SetFilePointer(tempfile, 0, NULL, FILE_CURRENT)) { }*/ SetEndOfFile(tempfile); CloseHandle(hfile); // TODO: check if replace isn't needed // (i.e. file already has the EOL format wanted) // // UPD: LF <-> CF check wasn't done if (Mode == MODE_DOS && GetFileSize(hfile, NULL) == GetFileSize(tempfile, NULL)) { //puts("(unchanged) "); return true; } if (!replaceFile(path, tempfile_name)) return false; return true; reading_failed: CloseHandle(hfile); return false; }
void *thread2(void *args) { replaceFile(); return 0; }