bool CommandObject::ParseOptions ( Args& args, CommandReturnObject &result ) { // See if the subclass has options? Options *options = GetOptions(); if (options != NULL) { Error error; options->NotifyOptionParsingStarting(); // ParseOptions calls getopt_long, which always skips the zero'th item in the array and starts at position 1, // so we need to push a dummy value into position zero. args.Unshift("dummy_string"); error = args.ParseOptions (*options); // The "dummy_string" will have already been removed by ParseOptions, // so no need to remove it. if (error.Success()) error = options->NotifyOptionParsingFinished(); if (error.Success()) { if (options->VerifyOptions (result)) return true; } else { const char *error_cstr = error.AsCString(); if (error_cstr) { // We got an error string, lets use that result.AppendError(error_cstr); } else { // No error string, output the usage information into result options->GenerateOptionUsage (result.GetErrorStream(), this); } } result.SetStatus (eReturnStatusFailed); return false; } return true; }