void __cdecl makeError ( unsigned lineNumber, unsigned msg, ...) { unsigned exitCode = 2; // general program err unsigned level; va_list args; // More arguments va_start(args, msg); // Point 'args' at first extra arg if (ON(gFlags,F1_CRYPTIC_OUTPUT) && (msg / 1000) == WARNING) { return; } displayBanner(); if (lineNumber) { fprintf(stderr, "%s(%u) : ", fName, lineNumber); } else { fprintf(stderr, "%s : ", NmakeStr); } switch (level = msg / 1000) { case FATAL: makeMessage(FATAL_ERROR_MESSAGE); if (msg == OUT_OF_MEMORY) { exitCode = 4; } break; case ERROR: makeMessage(ERROR_MESSAGE); break; case WARNING: makeMessage(WARNING_MESSAGE); break; } fprintf(stderr, " U%04d: ",msg); // U for utilities vfprintf(stderr, get_err(msg), args); putc('\n', stderr); fflush(stderr); if (level == FATAL) { fprintf(stderr, "Stop.\n"); delScriptFiles(); #if !defined(NDEBUG) printStats(); #endif exit(exitCode); } }
void CDECL NEAR makeError(unsigned lineNumber, unsigned msg, ...) { unsigned exitCode = 2, /* general program err */ level; va_list args; /* More arguments */ va_start (args, msg); /* Point 'args' at first extra arg */ if (ON(gFlags,F1_CRYPTIC_OUTPUT) && (msg / 1000) == WARNING) return; if (!bannerDisplayed) { displayBanner(); bannerDisplayed = (BOOL) TRUE; } switch (WaitForSingleObject(hSemaphore,WAIT_SEMAPHORE_TIME)){ case 0: if (lineNumber) fprintf(stderr,"%s(%d) : ",fName,lineNumber); else fprintf(stderr,"%s : ",NmakeStr); switch (level = msg / 1000) { case FATAL: makeMessage(FATAL_ERROR_MESSAGE); if (msg == OUT_OF_MEMORY) exitCode = 4; break; // // WIN32 - jaimes - 11/29/90 - Had to rename ERROR to NMAKE_ERROR // case NMAKE_ERROR: makeMessage(ERROR_MESSAGE); break; case WARNING: makeMessage(WARNING_MESSAGE); break; default: break; } fprintf(stderr," U%04d: ",msg); /* U for utilities */ vfprintf(stderr,getFarMsg(msg),args); putc('\n',stderr); fflush(stderr); #ifdef DEBUG_ERRORS if (msg == 1010) heapdump(__FILE__, __LINE__); #endif if (level == FATAL) { fprintf(stderr,"Stop.\n"); delScriptFiles(); #ifdef NMK_DEBUG fprintf(stderr, "Exiting with an error ...\n"); #endif exit(exitCode); } if (!ReleaseSemaphore(hSemaphore, 1, NULL)){ //MakA I don't use makeError because I will get blocked printf("ReleaseSemaphore error %d\n",GetLastError()); exit(1); } case WAIT_TIMEOUT: //MakA I don't use makeError because I will get blocked printf("Semaphore wait timeout\n"); exit(1); break; default: //MakA I don't use makeError because I will get blocked printf("Error unexpected value from semaphore wait %d\n",GetLastError()); exit(1); } }
void __cdecl main( unsigned argc, char *argv[], char *envp[]) /* environment variables */ { extern unsigned saveBytes; extern char **envPtr; int status; /* returned by doMake */ extern char *makeStr; #ifdef OS2_SIGNALS PUSHORT prev; unsigned long _FAR *pfnsig; #endif InitializeEnv(); #if defined(FLAT) fRunningUnderTNT = FIsTNT(); #endif initCharmap(); initMacroTable(macroTable); #ifdef DEBUG_MEMORY //This puts 0xff in all free entries in the heap _heapset(0xff); #endif envPtr = envp; #ifdef DEBUG_COMMANDLINE { int iArg = argc; char **chchArg = argv; for (; iArg--; chchArg++) printf("'%s' ", *chchArg); printf("\n"); } #endif #ifdef TEST_RUNTIME //Tests RunTime error R6001 {char near *foo = NULL; *foo = '1';} #endif #ifdef DOS startupDir = getCurDir(); #endif #ifdef FLAT resultbuf_size = sizeof(struct _finddata_t); #ifdef NT ext_size = CCHMAXPATHCOMP; filename_size = CCHMAXPATHCOMP; filenameext_size = CCHMAXPATH; #endif #else /* If OS/2 1.2 and beyond then allowed max sizes vary */ if (_osmajor < 10 || _osmode == DOS_MODE) resultbuf_size = sizeof(struct find_t); else if (_osminor < 20) resultbuf_size = sizeof(struct FileFindBuf); else { ext_size = CCHMAXPATHCOMP; filename_size = CCHMAXPATHCOMP; filenameext_size = CCHMAXPATH; resultbuf_size = sizeof(struct _FILEFINDBUF); } #endif if (!makeStr) /* extract file name */ if (!filename(_ftcscpy(fileStr, _pgmptr), &makeStr)) makeStr = "NMAKE"; // Initialize the message file SetErrorFile("nmake.err", _pgmptr, 1); // 1=Search Exe Path #if defined(SELF_RECURSE) initSavPtr = (char *)allocate(saveBytes = (&endOfSave - &startOfSave)); memmove(initSavPtr, &startOfSave, saveBytes); #endif /* set up handler for .PRECIOUS the handler tries to remove the * current target when control-C'd, unless it is "precious" */ #ifdef OS2_SIGNALS This commented out part was trial for using OS/2 function calls It still has some problems DOSSETSIGHANDLER(chkPrecious, pfnsig, prev, SIGA_ACCEPT, SIG_CTRLC); if (_osmode == OS2_MODE) { DOSSETSIGHANDLER(chkPrecious, NULL, NULL, SIGA_ACCEPT, SIG_CTRLBREAK); DOSSETSIGHANDLER(chkPrecious, NULL, NULL, SIGA_ACCEPT, SIG_KILLPROCESS); } #endif signal(SIGINT, chkPrecious); signal(SIGTERM, chkPrecious); makeIdeMessage(0, 0); status = doMake(argc, argv, NULL); #ifndef NO_OPTION_Z /* If -Z is specified then NMAKE needs to have errorLevel check in the * batch file. So add the goto label for exit and print the Reverse batch * file */ if (ON(gFlags, F1_REVERSE_BATCH_FILE)) { STRINGLIST *revCmd; //Adds ':NMAKEEXIT' to jump to end when error occurs revCmd = makeNewStrListElement(); revCmd->text = nmakeExitLabelCmd; prependItem(&revList, revCmd); //'=c' means echo at current line revCmd = makeNewStrListElement(); revCmd->text = makeString("=c"); appendItem(&revList, revCmd); //'=d' turns echoing on (unless preceeded by @) revCmd = makeNewStrListElement(); revCmd->text = makeString("=d"); appendItem(&revList, revCmd); } #endif delScriptFiles(); #ifndef NO_OPTION_Z if (ON(gFlags, F1_REVERSE_BATCH_FILE)) printReverseFile(); #endif #ifdef MEMORY_DEBUG mem_status(); #endif #ifdef HEAP_DIAGNOSTICS printHeapDiagnostics(); #endif #ifdef NMK_DEBUG fprintf(stderr, "Exiting...\n"); #endif if (!fSlashKStatus) //error when slashK specified status = 1; #if !defined(NDEBUG) && !defined(NT_BUILD) printStats(); #endif exit(status); }