pike.git / lib / modules / Process.pmod

version» Context lines:

pike.git/lib/modules/Process.pmod:27:      string sh_quote(string s)   {    return replace(s,    ({"\\", "'", "\"", " "}),    ({"\\\\", "\\'", "\\\"","\\ "}));   }      array(string) split_quoted_string(string s)   { -  s=replace(s, ({"\"","'","\\"," "}), ({"\0\"","\0'","\0\\","\0 "})); +  s=replace(s, +  ({"\"", "'", "\\", " ", "\t", "\n"}), +  ({"\0\"","\0'","\0\\","\0 ","\0\t","\0\n"}));    array(string) x=s/"\0";    array(string) ret=({x[0]});       for(int e=1;e<sizeof(x);e++)    {    switch(x[e][0])    {    case '"':    ret[-1]+=x[e][1..]; -  while(x[++e][0]!='"') ret[-1]+=x[e]; +  while(x[++e][0]!='"') +  { +  if(strlen(x[e])==1 && x[e][0]=='\\' && x[e+1][0]=='"') e++; +  ret[-1]+=x[e]; +  }    ret[-1]+=x[e][1..];    break;       case '\'':    ret[-1]+=x[e][1..];    while(x[++e][0]!='\'') ret[-1]+=x[e];    ret[-1]+=x[e][1..];    break;       case '\\':    if(strlen(x[e])>1)    {    ret[-1]+=x[e][1..];    }else{    ret[-1]+=x[++e];    }    break;       case ' ': -  if(strlen(x[e]) > 1 || sizeof(x)==e+1 || x[e+1][0]!=' ') +  case '\t': +  case '\n': +  while(strlen(x[e])==1 && (<' ','\t','\n'>) [x[e][0]] ) +  if(++e >= sizeof(x)) +  return ret;    ret+=({x[e][1..]});    break;       default:    ret[-1]+="\0"+x[e];    break;    }    }    return ret;   }