int main(int argc, const char* argv[]){ {std::string srcFile, printFile; parseOpt(argc-1, &argv[1], srcFile, printFile); void *state = newState(); parseFile(state,srcFile.c_str(),printFile.c_str()); freeState(state); } #ifdef WIN32 _CrtDumpMemoryLeaks(); #endif return 0; }
int main( int argc , char ** argv ) { // Spock +1 2000/12/5 WGSAddress[0] = 0; parseOpt(argc,argv); #ifndef _FIX_WORKS if( port < 0 ){ fprintf( stderr , "You have to specify port number by -p option.\n"); exit(1); } #endif // Spock 2000/12/5 if( strlen(WGSAddress) < 8 || strlen(WGSAddress) > 16 ){ fprintf( stderr , "You have to specify CS IP address by -a option.\n"); exit(1); } if( WGSPort < 0 ){ fprintf( stderr , "You have to specify CS port by -c option.\n"); exit(1); } #ifndef _FIX_WORKS fprintf( stderr , "\nport:[%d] debug:[%d] CS:[%s] CSPort:[%d]" , port , debug , WGSAddress , WGSPort ); // Spock end if( (mainsockfd = createMainSocket( port ))<0){ fprintf( stderr , "cannot create mainsocket: %s\n", strerror( errno )); return 1; } #else fprintf( stderr , "\ndebug:[%d] CS:[%s] CSPort:[%d]" , debug , WGSAddress , WGSPort ); #endif // Nuke +1 additional_process=time(0)/256; signal(SIGPIPE,sigpipe); signal(SIGUSR1,sigusr1); signal(SIGUSR2,sigusr2); signal(SIGTERM,sigterm); workerMainLoop(); return 0; }
void OptionList::parse(int argc, char** argv, const char* optstr) { opterr = 0; options.clear(); args.clear(); while(1) { optind = 1; parseOpt(this, argc, argv, optstr); argc -= optind; argv += optind; if(argc <= 0) { break; } args.add(argv[0]); } }
int main(int argc, char * const * argv) { parseOpt(argc, argv); return 0; }
int LshttpdMain::init(int argc, char *argv[]) { int ret; ServerProcessConfig &procConfig = ServerProcessConfig::getInstance(); if (argc > 1) parseOpt(argc, argv); if (getServerRoot(argc, argv) != 0) { //LS_ERROR("Failed to determine the root directory of server!" )); fprintf(stderr, "Can't determine the Home of LiteSpeed Web Server, exit!\n"); return 1; } mkdir(DEFAULT_TMP_DIR, 0755); if (testRunningServer() != 0) return 2; if (m_pServer->configServerBasics(0, m_pBuilder->getRoot())) return 1; if (!MainServerConfig::getInstance().getDisableLogRotateAtStartup()) LOG4CXX_NS::LogRotate::roll(HttpLog::getErrorLogger()->getAppender(), procConfig.getUid(), procConfig.getGid(), 1); if (procConfig.getUid() <= 10 || procConfig.getGid() < 10) { MainServerConfig &MainServerConfigObj = MainServerConfig::getInstance(); LS_ERROR("It is not allowed to run LiteSpeed web server on behalf of a " "privileged user/group, user id must not be " "less than 50 and group id must not be less than 10." "UID of user '%s' is %d, GID of group '%s' is %d. " "Please fix above problem first!", MainServerConfigObj.getUser(), procConfig.getUid(), MainServerConfigObj.getGroup(), procConfig.getGid()); return 1; } changeOwner(); plainconf::flushErrorLog(); LS_NOTICE("Loading %s ...", HttpServerVersion::getVersion()); LS_NOTICE("Using [%s]", SSLeay_version(SSLEAY_VERSION)); if (!m_noDaemon) { if (Daemonize::daemonize(1, 1)) return 3; LS_DBG_L("Daemonized!"); #ifndef RUN_TEST Daemonize::close(); #endif } enableCoreDump(); if (testRunningServer() != 0) return 2; m_pid = getpid(); if (m_pidFile.writePid(m_pid)) return 2; startAdminSocket(); ret = config(); if (ret) { LS_ERROR("Fatal error in configuration, exit!"); fprintf(stderr, "[ERROR] Fatal error in configuration, shutdown!\n"); return ret; } removeOldRtreport(); { char achBuf[8192]; if (procConfig.getChroot() != NULL) { PidFile pidfile; ConfigCtx::getCurConfigCtx()->getAbsolute(achBuf, PID_FILE, 0); pidfile.writePidFile(achBuf, m_pid); } } #if defined(__FreeBSD__) //setproctitle( "%s", "lshttpd" ); #else argv[1] = NULL; strcpy(argv[0], "openlitespeed (lshttpd - main)"); #endif //if ( !m_noCrashGuard && ( m_pBuilder->getCrashGuard() )) s_iCpuCount = PCUtil::getNumProcessors(); //Server init done if (GlobalServerSessionHooks->isEnabled(LSI_HKPT_MAIN_INITED)) GlobalServerSessionHooks->runCallbackNoParam(LSI_HKPT_MAIN_INITED, NULL); if (!m_noCrashGuard && (MainServerConfig::getInstance().getCrashGuard())) { if (guardCrash()) return 8; m_pidFile.closePidFile(); } else { HttpServerConfig::getInstance().setProcNo(1); allocatePidTracker(); m_pServer->initAdns(); m_pServer->enableAioLogging(); if ((HttpServerConfig::getInstance().getUseSendfile() == 2) && (m_pServer->initAioSendFile() != 0)) return LS_FAIL; } //if ( fcntl( 5, F_GETFD, 0 ) > 0 ) // printf( "find it!\n" ); if (getuid() == 0) { if (m_pServer->changeUserChroot() == -1) return LS_FAIL; if (procConfig.getChroot() != NULL) m_pServer->offsetChroot(); } if (1 == HttpServerConfig::getInstance().getProcNo()) ExtAppRegistry::runOnStartUp(); if (GlobalServerSessionHooks->isEnabled(LSI_HKPT_WORKER_INIT)) GlobalServerSessionHooks->runCallbackNoParam(LSI_HKPT_WORKER_INIT, NULL); return 0; }
/** * Parse the arguments. * * @returns 0 on success, fully bitched exit code on failure. * * @param argc Argument count. * @param argv Argument vector. * * @todo r=bird: The --help and --version options shall not return a * non-zero exit code. So, this method need to grow some * complexity. I'm to blame for that blunder :/ */ int VBoxNetBaseService::parseArgs(int argc, char **argv) { RTGETOPTSTATE State; PRTGETOPTDEF paOptionArray = getOptionsPtr(); int rc = RTGetOptInit(&State, argc, argv, paOptionArray, m->m_vecOptionDefs.size(), 0, 0 /*fFlags*/); AssertRCReturn(rc, 49); #if 0 /* default initialization */ m_enmTrunkType = kIntNetTrunkType_WhateverNone; #endif Log2(("BaseService: parseArgs enter\n")); for (;;) { RTGETOPTUNION Val; rc = RTGetOpt(&State, &Val); if (!rc) break; switch (rc) { case 'N': // --name m->m_ServiceName = Val.psz; break; case 'n': // --network m->m_NetworkName = Val.psz; break; case 't': //--trunk-name m->m_TrunkName = Val.psz; break; case 'T': //--trunk-type if (!strcmp(Val.psz, "none")) m->m_enmTrunkType = kIntNetTrunkType_None; else if (!strcmp(Val.psz, "whatever")) m->m_enmTrunkType = kIntNetTrunkType_WhateverNone; else if (!strcmp(Val.psz, "netflt")) m->m_enmTrunkType = kIntNetTrunkType_NetFlt; else if (!strcmp(Val.psz, "netadp")) m->m_enmTrunkType = kIntNetTrunkType_NetAdp; else if (!strcmp(Val.psz, "srvnat")) m->m_enmTrunkType = kIntNetTrunkType_SrvNat; else { RTStrmPrintf(g_pStdErr, "Invalid trunk type '%s'\n", Val.psz); return RTEXITCODE_SYNTAX; } break; case 'a': // --mac-address m->m_MacAddress = Val.MacAddr; break; case 'i': // --ip-address m->m_Ipv4Address = Val.IPv4Addr; break; case 'm': // --netmask m->m_Ipv4Netmask = Val.IPv4Addr; break; case 'v': // --verbose m->m_cVerbosity++; break; case 'V': // --version (missed) RTPrintf("%sr%u\n", RTBldCfgVersion(), RTBldCfgRevision()); return 1; /** @todo this exit code is wrong, of course. :/ */ case 'M': // --need-main m->m_fNeedMain = true; break; case 'h': // --help (missed) RTPrintf("%s Version %sr%u\n" "(C) 2009-" VBOX_C_YEAR " " VBOX_VENDOR "\n" "All rights reserved.\n" "\n" "Usage: %s <options>\n" "\n" "Options:\n", RTProcShortName(), RTBldCfgVersion(), RTBldCfgRevision(), RTProcShortName()); for (unsigned int i = 0; i < m->m_vecOptionDefs.size(); i++) RTPrintf(" -%c, %s\n", m->m_vecOptionDefs[i]->iShort, m->m_vecOptionDefs[i]->pszLong); usage(); /* to print Service Specific usage */ return 1; /** @todo this exit code is wrong, of course. :/ */ default: { int rc1 = parseOpt(rc, Val); if (RT_FAILURE(rc1)) { RTEXITCODE rcExit = RTGetOptPrintError(rc, &Val); RTPrintf("Use --help for more information.\n"); return rcExit; } break; } } } RTMemFree(paOptionArray); return RTEXITCODE_SUCCESS; }
/** * Parse the arguments. * * @returns 0 on success, fully bitched exit code on failure. * * @param argc Argument count. * @param argv Argument vector. */ int VBoxNetBaseService::parseArgs(int argc, char **argv) { RTGETOPTSTATE State; PRTGETOPTDEF paOptionArray = getOptionsPtr(); int rc = RTGetOptInit(&State, argc, argv, paOptionArray, m_vecOptionDefs.size(), 0, 0 /*fFlags*/); AssertRCReturn(rc, 49); #if 0 /* default initialization */ m_enmTrunkType = kIntNetTrunkType_WhateverNone; #endif Log2(("BaseService: parseArgs enter\n")); for (;;) { RTGETOPTUNION Val; rc = RTGetOpt(&State, &Val); if (!rc) break; switch (rc) { case 'N': m_Name = Val.psz; break; case 'n': m_Network = Val.psz; break; case 't': m_TrunkName = Val.psz; break; case 'T': if (!strcmp(Val.psz, "none")) m_enmTrunkType = kIntNetTrunkType_None; else if (!strcmp(Val.psz, "whatever")) m_enmTrunkType = kIntNetTrunkType_WhateverNone; else if (!strcmp(Val.psz, "netflt")) m_enmTrunkType = kIntNetTrunkType_NetFlt; else if (!strcmp(Val.psz, "netadp")) m_enmTrunkType = kIntNetTrunkType_NetAdp; else if (!strcmp(Val.psz, "srvnat")) m_enmTrunkType = kIntNetTrunkType_SrvNat; else { RTStrmPrintf(g_pStdErr, "Invalid trunk type '%s'\n", Val.psz); return 1; } break; case 'a': m_MacAddress = Val.MacAddr; break; case 'i': m_Ipv4Address = Val.IPv4Addr; break; case 'm': m_Ipv4Netmask = Val.IPv4Addr; break; case 'v': m_cVerbosity++; break; case 'V': RTPrintf("%sr%u\n", RTBldCfgVersion(), RTBldCfgRevision()); return 1; case 'h': RTPrintf("VBoxNetDHCP Version %s\n" "(C) 2009-" VBOX_C_YEAR " " VBOX_VENDOR "\n" "All rights reserved.\n" "\n" "Usage: VBoxNetDHCP <options>\n" "\n" "Options:\n", RTBldCfgVersion()); for (unsigned int i = 0; i < m_vecOptionDefs.size(); i++) RTPrintf(" -%c, %s\n", m_vecOptionDefs[i]->iShort, m_vecOptionDefs[i]->pszLong); usage(); /* to print Service Specific usage */ return 1; default: int rc1 = parseOpt(rc, Val); if (RT_FAILURE(rc1)) { rc = RTGetOptPrintError(rc, &Val); RTPrintf("Use --help for more information.\n"); return rc; } } } RTMemFree(paOptionArray); return rc; }