static void s_MacArgMunging(CNcbiApplication& app, int* argcPtr, const char* const** argvPtr, const string& exepath) { // Sometimes on Mac there will be an argument -psn which // will be followed by the Process Serial Number, e.g. -psn_0_13107201 // this is in situations where the application could have no other // arguments like when it is double clicked. // This will mess up argument processing later, so get rid of it. static const char* s_ArgMacPsn = "-psn_"; if (*argcPtr == 2 && NStr::strncmp((*argvPtr)[1], s_ArgMacPsn, strlen(s_ArgMacPsn)) == 0) { --*argcPtr; } if (*argcPtr > 1) return; // Have no arguments from the operating system -- so use the '.args' file // Open the args file. string exedir; CDir::SplitPath(exepath, &exedir); string args_fname = exedir + app.GetProgramDisplayName() + ".args"; CNcbiIfstream in(args_fname.c_str()); if ( !in.good() ) { ERR_POST_X(2, Info << "Mac arguments file not found: " << args_fname); return; } vector<string> v; // remember or fake the executable name. if (*argcPtr > 0) { v.push_back((*argvPtr)[0]); // preserve the original argv[0]. } else { v.push_back(exepath); } // grab the rest of the arguments from the file. // arguments are separated by whitespace. Can be on // more than one line. string arg; while (in >> arg) { v.push_back(arg); } // stash them away in the standard argc and argv places. *argcPtr = v.size(); char** argv = new char*[v.size()]; int c = 0; ITERATE(vector<string>, vp, v) { argv[c++] = strdup(vp->c_str()); }
static void x_SetupUserAgent(SConnNetInfo* net_info) { CNcbiApplication* theApp = CNcbiApplication::Instance(); if (theApp) { string user_agent("User-Agent: "); user_agent += theApp->GetProgramDisplayName(); ConnNetInfo_ExtendUserHeader(net_info, user_agent.c_str()); } }