[Spice-devel] [PATCH spice 5/9] spicec: enable multiple CmdLineParser instantiations

Arnon Gilboa agilboa at redhat.com
Sun Oct 17 07:13:43 PDT 2010


Used by controller. One instance at a time, not thread-safe.
Add basename() for win32.
---
 client/cmd_line_parser.cpp |   23 ++++++++++++++++++++++-
 1 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/client/cmd_line_parser.cpp b/client/cmd_line_parser.cpp
index 3f45551..a9c1857 100644
--- a/client/cmd_line_parser.cpp
+++ b/client/cmd_line_parser.cpp
@@ -53,6 +53,11 @@ CmdLineParser::CmdLineParser(std::string description, bool allow_positional_args
     , _positional_args (allow_positional_args)
     , _done (false)
 {
+    //Enables multiple instantiations. One at a time, not thread-safe.
+    optind = 1;
+    opterr = 1;
+    optopt = 0;
+    optarg = 0;
 }
 
 CmdLineParser::~CmdLineParser()
@@ -428,13 +433,29 @@ char* CmdLineParser::next_argument()
     return _argv[optind++];
 }
 
+#ifdef WIN32
+char* basename(char *str)
+{
+    char *base;
+    if ((base = strrchr(str, '\\'))) {
+        return base;
+    }
+
+    if ((base = strrchr(str, ':'))) {
+        return base;
+    }
+    return str;
+}
+
+#endif
+
 void CmdLineParser::show_help()
 {
     static const int HELP_START_POS = 30;
     static const int HELP_WIDTH = 80 - HELP_START_POS;
     std::ostringstream os;
 
-    os << _argv[0] << " - " << _description.c_str() << "\n\noptions:\n\n";
+    os << basename(_argv[0]) << " - " << _description.c_str() << "\n\noptions:\n\n";
 
     Options::iterator iter = _options.begin();
     for (; iter != _options.end(); ++iter) {
-- 
1.5.5.6



More information about the Spice-devel mailing list