Logo Search packages:      
Sourcecode: vdr-plugin-burn version File versions  Download package

shellescape.cc

#include "format.h"
#include "shellescape.h"

namespace proctools
{

      using std::string;
      using std::ostream;

      string shell_escape(const string& text, const string& escape)
      {
            string result( text );
            for (string::size_type pos = 0; pos < result.length(); ++pos) {
                  string::size_type charPos = escape.find(result[pos]);
                  if (charPos != string::npos) {
                        char replacement[3] = "\\ ";
                        replacement[1] = escape[charPos];
                        result.replace(pos++, 1, replacement);
                  }
            }
            return result;
      }

      shellescape::shellescape( const string& program ):
                  m_cmdline( program )
      {
      }

      shellescape shellescape::operator+( const string& arg )
      {
            static const char* simpleChars( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:+%/#~" );

            if ( arg.find_first_not_of( simpleChars ) != string::npos )
                  m_cmdline += format( " \"{0}\"" ) % shell_escape( arg );
            else
                  m_cmdline += format( " {0}" ) % arg;

            return *this;
      }

      ostream& operator<<( ostream& stream, const shellescape& call )
      {
            return stream << call.m_cmdline;
      }

}

Generated by  Doxygen 1.6.0   Back to index