MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
SetEnvDR Struct Reference
Inheritance diagram for SetEnvDR:
Collaboration diagram for SetEnvDR:

Public Member Functions

bool Read (HighParser &HP)
 
- Public Member Functions inherited from DescRead
virtual ~DescRead (void)
 

Detailed Description

Definition at line 442 of file parser.cc.

Member Function Documentation

bool SetEnvDR::Read ( HighParser HP)
virtual

Implements DescRead.

Definition at line 448 of file parser.cc.

References HighParser::GetLineData(), HighParser::GetStringWithDelims(), HighParser::GetYesNoOrBool(), HighParser::IsArg(), HighParser::IsKeyWord(), and MBDYN_EXCEPT_ARGS.

449 {
450 #ifdef HAVE_SETENV
451  if (!HP.IsArg()) {
452  silent_cerr("Parser error in SetEnvDR::Read(), "
453  "arg(s) expected at line "
454  << HP.GetLineData() << std::endl);
456  }
457 
458  int overwrite = 0;
459  if (HP.IsKeyWord("overwrite")) {
460  bool b = HP.GetYesNoOrBool();
461  overwrite = b ? 1 : 0;
462  }
463 
464  const char *ava = HP.GetStringWithDelims();
465  if (ava == NULL) {
466  silent_cerr("unable to get AVA for \"setenv\" at line "
467  << HP.GetLineData() << std::endl);
469  }
470 
471  char *avasep = std::strchr(const_cast<char *>(ava), '=');
472  if (avasep == NULL) {
473 #ifdef HAVE_UNSETENV
474  unsetenv(ava);
475 #elif defined(HAVE_PUTENV)
476  if (putenv(ava)) {
477  silent_cerr("unable to unset the environment variable "
478  "\"" << ava << "\" at line "
479  << HP.GetLineData() << std::endl);
481  }
482 #endif /* !HAVE_UNSETENV && !HAVE_PUTENV */
483 
484  } else {
485  if (avasep == ava) {
486  silent_cerr("illegal AVA \"" << ava
487  << "\" at line "
488  << HP.GetLineData() << std::endl);
490  }
491 
492  avasep[0] = '\0';
493  avasep++;
494  bool bPresent(getenv(ava) != NULL);
495  int rc = setenv(ava, avasep, overwrite);
496  if (rc) {
497  silent_cerr("unable to set the environment variable \""
498  << ava << "\" to \"" << avasep
499  << "\" at line " << HP.GetLineData()
500  << std::endl);
502  }
503 
504  if (bPresent && overwrite == 0) {
505  silent_cout("Environment variable \"" << ava
506  << "\" _not_ overwritten with \"" << avasep
507  << "\" (current value is \"" << getenv(ava)
508  << "\") at line " << HP.GetLineData()
509  << std::endl);
510 
511  } else if (!bPresent) {
512  silent_cout("Environment variable \"" << ava
513  << "\" set to \"" << avasep
514  << "\" at line " << HP.GetLineData()
515  << std::endl);
516 
517  } else {
518  silent_cout("Environment variable \"" << ava
519  << "\" overwritten to \"" << avasep
520  << "\" at line " << HP.GetLineData()
521  << std::endl);
522  }
523  }
524 #else // ! HAVE_SETENV
525  silent_cerr("SetEnvDR::Read(): warning, setenv() not available; ignored at line "
526  << HP.GetLineData() << std::endl);
527 #endif // !HAVE_SETENV
528  return true;
529 }
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
virtual HighParser::ErrOut GetLineData(void) const
Definition: parser.cc:681
virtual bool GetYesNoOrBool(bool bDefval=false)
Definition: parser.cc:1038
virtual bool IsKeyWord(const char *sKeyWord)
Definition: parser.cc:910
virtual const char * GetStringWithDelims(enum Delims Del=DEFAULTDELIM, bool escape=true)
Definition: parser.cc:1228
virtual bool IsArg(void)
Definition: parser.cc:807

Here is the call graph for this function:


The documentation for this struct was generated from the following file: