void olga_notified(int *pipe) { char *p = *(char **)&pipe[3]; #ifdef DEBUG printf("OLGA: OLGA_NOTIFIED App %i %s\n",pipe[1],p); #endif globalFree(p); }
int main(int argc, char *argv[]) { char buffer[256]; char *p; BOOLEAN multipleFiles = FALSE; int rv; char realOutFile[260]; char oldOutFile[260]; srand(time(0)); /* signal(SIGSEGV,internalError) ;*/ /* signal(SIGFPE, internalError) ;*/ /* initialize back end */ if (!init_backend(&argc,argv)) fatal("Could not initialize back end"); if (chosenAssembler->Args) { CMDLIST *newArgs = calloc(sizeof(Args) + sizeof(Args[0]) * chosenAssembler->ArgCount, 1); if (newArgs) { memcpy(&newArgs[0], chosenAssembler->Args, chosenAssembler->ArgCount *sizeof(Args[0])); memcpy(&newArgs[chosenAssembler->ArgCount], &Args[0], sizeof(Args)); ArgList = newArgs; } } /* parse environment variables, command lines, and config files */ ccinit(argc, argv); /* loop through and preprocess all the files on the file list */ if (clist && clist->next) multipleFiles = TRUE; #ifdef PARSER_ONLY strcpy(buffer, clist->data); strcpy(realOutFile, outfile); outputfile(realOutFile, buffer, ".ods"); if (!ccDBOpen(realOutFile)) fatal("Cannot open database file %s", realOutFile); #else BitInit(); regInit(); #endif while (clist) { cparams.prm_cplusplus = FALSE; strcpy(buffer, clist->data); #ifndef PARSER_ONLY strcpy(realOutFile, outfile); if (cparams.prm_asmfile) outputfile(realOutFile, buffer, chosenAssembler->asmext); else outputfile(realOutFile, buffer, chosenAssembler->objext); strcpy(oldOutFile, realOutFile); StripExt(oldOutFile); AddExt(oldOutFile, ".tmp"); #else ccNewFile(buffer, TRUE); #endif AddExt(buffer, ".C"); p = strrchr(buffer, '.'); if (*(p - 1) != '.') { if (p[1] == 'h' || p[1] == 'H') // compile H files as C++ for the IDE cparams.prm_cplusplus = TRUE; if (p[1] == 'c' || p[1] == 'C') if (p[2] == 'p' || p[2] == 'P') { if (p[3] == 'p' || p[3] == 'P') cparams.prm_cplusplus = TRUE; } else { if (p[2] == 'x' || p[2] == 'X') { if (p[3] == 'x' || p[3] == 'X') cparams.prm_cplusplus = TRUE; } } else if ((p[2] == 'c' ||p[2] == 'C' ) && !p[3]) { cparams.prm_cplusplus = TRUE; } else { if (p[2] == '+') { if (p[3] == '+') cparams.prm_cplusplus = TRUE; } } } inputFile = SrchPth2(buffer, "", "r"); if (!inputFile) fatal("Cannot open input file %s", buffer); strcpy(infile, buffer); if (cparams.prm_makestubs) { MakeStubs(); } else { #ifndef PARSER_ONLY unlink(oldOutFile); rename(realOutFile, oldOutFile); outputFile = fopen(realOutFile, cparams.prm_asmfile ? "w" : "wb"); if (!outputFile) { fclose(inputFile); fatal("Cannot open output file %s", realOutFile); } setvbuf(outputFile,0,_IOFBF,32768); #endif if (cparams.prm_cppfile) { StripExt(buffer); AddExt(buffer, ".i"); strcpy(cppfile, buffer); cppFile = fopen(buffer, "w"); if (!cppFile) { fclose(inputFile); fclose(outputFile); fatal("Cannot open preprocessor output file %s", buffer); } } if (cparams.prm_listfile) { StripExt(buffer); AddExt(buffer, ".lst"); listFile = fopen(buffer, "w"); if (!listFile) { fclose(inputFile); fclose(cppFile); fclose(outputFile); fatal("Cannot open list file %s", buffer); } } if (cparams.prm_errfile) { StripExt(buffer); AddExt(buffer, ".err"); errFile = fopen(buffer, "w"); if (!errFile) { fclose(inputFile); fclose(cppFile); fclose(listFile); fclose(outputFile); fatal("Cannot open error file %s", buffer); } } if (cparams.prm_browse) { char name[260]; strcpy(name, outfile); StripExt(name); AddExt(name, ".cbr"); browseFile = fopen(name, "wb"); if (!browseFile) { fclose(errFile); fclose(inputFile); fclose(cppFile); fclose(listFile); fclose(outputFile); fatal("Cannot open browse file %s", buffer); } setvbuf(browseFile,0,_IOFBF,32768); } if (cparams.prm_icdfile) { StripExt(buffer); AddExt(buffer, ".icd"); icdFile = fopen(buffer, "w"); if (!icdFile) { fclose(browseFile); fclose(errFile); fclose(inputFile); fclose(cppFile); fclose(listFile); fclose(outputFile); fatal("Cannot open error file %s", buffer); } setvbuf(icdFile,0,_IOFBF,32768); } if (multipleFiles && !cparams.prm_quiet) printf("%s\n", clist->data); compile(); } #ifdef PARSER_ONLY localFree(); #endif globalFree(); if (cparams.prm_diag) { mem_summary(); printf("Intermediate stats:\n"); printf(" Block peak: %d\n", maxBlocks); printf(" Temp peak: %d\n", maxTemps); printf(" Allocation Spills: %d\n", maxAllocationSpills); printf(" Allocation Passes: %d\n", maxAllocationPasses); printf(" Allocation Accesses: %d\n", maxAllocationAccesses); } maxBlocks = maxTemps = maxAllocationSpills = maxAllocationPasses = maxAllocationAccesses = 0; #ifdef PARSER_ONLY ccCloseFile(inputFile); #else fclose(inputFile); #endif if (outputFile) fclose(outputFile); if (cppFile) fclose(cppFile); if (listFile) fclose(listFile); if (errFile) fclose(errFile); if (browseFile) fclose(browseFile); if (icdFile) fclose(icdFile); if (total_errors) { unlink(realOutFile); rename(oldOutFile, realOutFile); } else { unlink (oldOutFile); } /* Flag to stop if there are any errors */ stoponerr |= total_errors; clist = clist->next; } rv = !!stoponerr ; if (!cparams.prm_makestubs) { if (!cparams.prm_compileonly && !stoponerr) { rv = 0 ; if (chosenAssembler->compiler_postprocess) { char buf[260]; #ifdef MICROSOFT GetModuleFileNameA(NULL, buffer, sizeof(buffer)); #else strcpy(buffer, argv[0]); #endif rv = chosenAssembler->compiler_postprocess(buffer); } } if (chosenAssembler->rundown) chosenAssembler->rundown(); } return rv; }
void clean_all (int sig) { globalFree(); exit(5); }
void ole_exit(int *pipe) { App *pad; #ifdef DEBUG printf("OLGA: OLE_EXIT App %i\n",pipe[1]); #endif denotify(pipe[1],0,0); unLink(FALSE,FALSE,pipe); close_doc(FALSE,pipe); server_terminated(pipe[1],0); client_terminated(pipe[1]); _exit: pad = apps; while (pad) { if (pad->apID == pipe[1]) { int i; for (i=0; i<=CMDMAX; i++) globalFree(pad->startCmd[i]); if ((!pad->Prev) && (!pad->Next)) apps = NULL; else { if (!pad->Prev) apps = pad->Next; else pad->Prev->Next = pad->Next; if (pad->Next) pad->Next->Prev = pad->Prev; } free(pad); appCount--; goto _exit; } pad = pad->Next; } if (!appCount) { if ((multitask) && (_app) && (apName)) { char *p = getenv("OLGAMANAGER"); if (p) { if (!stricmp(p,apName)) { #ifdef DEBUG printf(DEBUG_DEACTIVATED); #endif appl_exit(); exit(0); } } } } }
/** * Destructor */ RMRes::~RMRes() { if (_h != NULL) { globalUnlock(_h); globalFree(_h); } }