- if (running())
- return -1;
- pid=-1;
- killstate=0;
-// eDebug("cmd = %s", cmd.c_str() );
- int cnt=2; // path to app + terminated 0
- std::string str(cmd.length()?cmd:"");
-
- // kill spaces at beginning
- unsigned int pos = str.find_first_not_of(' ');
- if (pos != std::string::npos && pos)
- str = str.substr(pos);
-
- // kill spaces at the end
- pos = str.find_last_not_of(' ');
- if (pos != std::string::npos && (pos+1) < str.length())
- str = str.erase(pos+1);
-
- unsigned int slen=str.length();
- if (!slen)
- return -2;
-
- std::map<char,char> brackets;
- brackets.insert(std::pair<char,char>('\'','\''));
- brackets.insert(std::pair<char,char>('"','"'));
- brackets.insert(std::pair<char,char>('`','`'));
- brackets.insert(std::pair<char,char>('(',')'));
- brackets.insert(std::pair<char,char>('{','}'));
- brackets.insert(std::pair<char,char>('[',']'));
- brackets.insert(std::pair<char,char>('<','>'));
-
- unsigned int idx=str.find(' ');
- std::string path = str.substr(0, idx != std::string::npos ? idx : slen );
-// eDebug("path = %s", path.c_str() );
- unsigned int plen = path.length();
-
- std::string cmds = slen > plen ? str.substr( plen+1 ) : "";
- unsigned int clen = cmds.length();
-// eDebug("cmds = %s", cmds.c_str() );
-
- idx = 0;
- std::map<char,char>::iterator it = brackets.find(cmds[idx]);
- while ( (idx = cmds.find(' ',idx) ) != std::string::npos ) // count args
- {
- if (it != brackets.end())
- {
- if (cmds[idx-1] == it->second)
- it = brackets.end();
- }
- if (it == brackets.end())
- {
- cnt++;
- it = brackets.find(cmds[idx+1]);
- }
- idx++;
- }