OptionParser.cpp revision 269024
1279264Sdelphij//===-- source/Host/common/OptionParser.cpp ---------------------*- C++ -*-===// 2238405Sjkim// 3238405Sjkim// The LLVM Compiler Infrastructure 4238405Sjkim// 5238405Sjkim// This file is distributed under the University of Illinois Open Source 6238405Sjkim// License. See LICENSE.TXT for details. 7238405Sjkim// 8238405Sjkim//===----------------------------------------------------------------------===// 9238405Sjkim 10238405Sjkim#include "lldb/Host/OptionParser.h" 11238405Sjkim 12238405Sjkim#if (!defined( _MSC_VER ) && defined( _WIN32 )) 13238405Sjkim#define _BSD_SOURCE // Required so that getopt.h defines optreset 14238405Sjkim#endif 15238405Sjkim#include "lldb/Host/HostGetOpt.h" 16238405Sjkim 17238405Sjkimusing namespace lldb_private; 18238405Sjkim 19238405Sjkimvoid 20238405SjkimOptionParser::Prepare() 21238405Sjkim{ 22238405Sjkim#ifdef __GLIBC__ 23238405Sjkim optind = 0; 24238405Sjkim#else 25238405Sjkim optreset = 1; 26238405Sjkim optind = 1; 27238405Sjkim#endif 28238405Sjkim} 29238405Sjkim 30238405Sjkimvoid 31238405SjkimOptionParser::EnableError(bool error) 32238405Sjkim{ 33238405Sjkim opterr = error ? 1 : 0; 34238405Sjkim} 35238405Sjkim 36238405Sjkimint 37238405SjkimOptionParser::Parse (int argc, 38238405Sjkim char * const argv [], 39238405Sjkim const char *optstring, 40238405Sjkim const Option *longopts, 41279264Sdelphij int *longindex) 42279264Sdelphij{ 43238405Sjkim return getopt_long_only(argc, argv, optstring, (const option*)longopts, longindex); 44238405Sjkim} 45238405Sjkim 46238405Sjkimchar* 47238405SjkimOptionParser::GetOptionArgument() 48238405Sjkim{ 49238405Sjkim return optarg; 50238405Sjkim} 51238405Sjkim 52238405Sjkimint 53279264SdelphijOptionParser::GetOptionIndex() 54279264Sdelphij{ 55279264Sdelphij return optind; 56238405Sjkim} 57279264Sdelphij 58279264Sdelphijint 59279264SdelphijOptionParser::GetOptionErrorCause() 60279264Sdelphij{ 61279264Sdelphij return optopt; 62279264Sdelphij} 63238405Sjkim 64279264Sdelphijstd::string 65279264SdelphijOptionParser::GetShortOptionString(struct option *long_options) 66279264Sdelphij{ 67279264Sdelphij std::string s; 68279264Sdelphij int i=0; 69238405Sjkim bool done = false; 70279264Sdelphij while (!done) 71238405Sjkim { 72238405Sjkim if (long_options[i].name == 0 && 73238405Sjkim long_options[i].has_arg == 0 && 74238405Sjkim long_options[i].flag == 0 && 75238405Sjkim long_options[i].val == 0) 76238405Sjkim { 77238405Sjkim done = true; 78238405Sjkim } 79238405Sjkim else 80238405Sjkim { 81238405Sjkim if (long_options[i].flag == NULL && 82238405Sjkim isalpha(long_options[i].val)) 83238405Sjkim { 84238405Sjkim s.append(1, (char)long_options[i].val); 85238405Sjkim switch (long_options[i].has_arg) 86238405Sjkim { 87238405Sjkim default: 88238405Sjkim case no_argument: 89238405Sjkim break; 90238405Sjkim 91238405Sjkim case optional_argument: 92238405Sjkim s.append(2, ':'); 93238405Sjkim break; 94238405Sjkim case required_argument: 95238405Sjkim s.append(1, ':'); 96238405Sjkim break; 97238405Sjkim } 98238405Sjkim } 99238405Sjkim ++i; 100238405Sjkim } 101238405Sjkim } 102238405Sjkim return s; 103238405Sjkim} 104238405Sjkim