Diff for /parser3/src/main/pa_exec.C between versions 1.48.2.10 and 1.48.2.12

version 1.48.2.10, 2003/02/04 12:08:57 version 1.48.2.12, 2003/02/06 14:24:50
Line 111  error: Line 111  error:
     return result;      return result;
 }  }
   
 static void read_pipe(Pool& pool, StringPtr result, HANDLE hOutRead, const char* file_spec,   static StringPtr read_pipe(Pool& pool, HANDLE hOutRead, const char* file_spec, 
                                           String::Untaint_lang lang){                                            String::Untaint_lang lang){
           StringPtr result(new String);
         while(true) {          while(true) {
                 char *buf=new(pool) char[MAX_STRING];                  char *buf=new(pool) char[MAX_STRING];
                 unsigned long size;                  unsigned long size;
Line 120  static void read_pipe(Pool& pool, String Line 121  static void read_pipe(Pool& pool, String
                         break;                          break;
                 result->APPEND(buf, size, lang, file_spec, 0);                  result->APPEND(buf, size, lang, file_spec, 0);
     }      }
           return result;
 }  }
   
 static CharPtr buildCommand(CharPtr file_spec_cstr, Array<StringPtr>& argv) {  static CharPtr buildCommand(CharPtr file_spec_cstr, ArrayString& argv) {
         CharPtr result=file_spec_cstr;          CharPtr result=file_spec_cstr;
         if(FILE *f=fopen(file_spec_cstr, "r")) {          if(FILE *f=fopen(file_spec_cstr, "r")) {
                 try {                  try {
Line 277  static int get_exit_status(int pid) { Line 279  static int get_exit_status(int pid) {
                 WEXITSTATUS(status) : -2;                  WEXITSTATUS(status) : -2;
 }  }
   
 static void read_pipe(Pool& pool, StringPtr result, int file, const char* file_spec, String::Untaint_lang lang){  static StringPtr read_pipe(Pool& pool, int file, const char* file_spec, String::Untaint_lang lang){
           StringPtr result(new String);
         while(true) {          while(true) {
                 char *buf=new(pool) char[MAX_STRING];                  char *buf=new(pool) char[MAX_STRING];
                 ssize_t size=read(file, buf, MAX_STRING);                  ssize_t size=read(file, buf, MAX_STRING);
Line 285  static void read_pipe(Pool& pool, String Line 288  static void read_pipe(Pool& pool, String
                         break;                          break;
                 result->APPEND(buf, size, lang, file_spec, 0);                  result->APPEND(buf, size, lang, file_spec, 0);
     }      }
           return result;
 }  }
   
 #endif  #endif
Line 314  static void append_env_pair(HashStringSt Line 318  static void append_env_pair(HashStringSt
 }  }
   
 /// @todonow unix part to smart_ptr  /// @todonow unix part to smart_ptr
 int pa_exec(Pool& pool,  PA_exec_result pa_exec(Pool& pool,
                         bool forced_allow,                           bool forced_allow, 
                         StringPtr file_spec,                           StringPtr file_spec, 
                         HashStringString& env,                           HashStringString& env, 
                         Array<StringPtr>& argv,                           ArrayString& argv, 
                         StringPtr in, StringPtr out, StringPtr err) {                          String& in) {
           PA_exec_result result;
   
 #ifdef NO_PA_EXECS  #ifdef NO_PA_EXECS
         if(!forced_allow)          if(!forced_allow)
                 throw Exception("parser.runtime",                  throw Exception("parser.runtime",
Line 355  int pa_exec(Pool& pool, Line 361  int pa_exec(Pool& pool,
                         "exec failed - %s (%ld). Consider adding shbang line (#!x:\\interpreter\\command line)",                           "exec failed - %s (%ld). Consider adding shbang line (#!x:\\interpreter\\command line)", 
                                 error_size?szErrorDesc:"<unknown>", (long)error);                                  error_size?szErrorDesc:"<unknown>", (long)error);
         } else {          } else {
                 CharPtr in_cstr=in->cstr();                  CharPtr in_cstr=in.cstr();
                 DWORD written_size;                  DWORD written_size;
                 WriteFile(hInWrite, in_cstr, in->size(), &written_size, NULL);                  WriteFile(hInWrite, in_cstr, in.size(), &written_size, NULL);
                 // EOF for stupid text reads                  // EOF for stupid text reads
                 // normally they should read CONTENT_LENGTH bytes,                  // normally they should read CONTENT_LENGTH bytes,
                 // without this char                  // without this char
                 WriteFile(hInWrite, "\x1A", 1, &written_size, NULL);                  WriteFile(hInWrite, "\x1A", 1, &written_size, NULL);
                 CloseHandle(hInWrite);                  CloseHandle(hInWrite);
                 read_pipe(pool, out, hOutRead, file_spec_cstr, String::UL_AS_IS);                  result.out=read_pipe(pool, hOutRead, file_spec_cstr, String::UL_AS_IS);
                 CloseHandle(hOutRead);                  CloseHandle(hOutRead);
                 read_pipe(pool, err, hErrRead, file_spec_cstr, String::UL_TAINTED);                               result.err=read_pipe(pool, hErrRead, file_spec_cstr, String::UL_TAINTED);               
                 CloseHandle(hErrRead);                  CloseHandle(hErrRead);
 /*        /*      
 from http://www.apache.org/websrc/cvsweb.cgi/apache-1.3/src/main/util_script.c?rev=1.151&content-type=text/vnd.viewcvs-markup  from http://www.apache.org/websrc/cvsweb.cgi/apache-1.3/src/main/util_script.c?rev=1.151&content-type=text/vnd.viewcvs-markup
Line 428  from http://www.apache.org/websrc/cvsweb Line 434  from http://www.apache.org/websrc/cvsweb
                         write(pipe_write, in_cstr, in->size());                          write(pipe_write, in_cstr, in->size());
                 }                  }
                 close(pipe_write);                  close(pipe_write);
                 read_pipe(pool, out, pipe_read, file_spec_cstr, String::UL_AS_IS);                  result.out=read_pipe(pool, pipe_read, file_spec_cstr, String::UL_AS_IS);
                 close(pipe_read);                  close(pipe_read);
                 read_pipe(pool, err, pipe_err, file_spec_cstr, String::UL_TAINTED);                  result.err=read_pipe(pool, pipe_err, file_spec_cstr, String::UL_TAINTED);
                 close(pipe_err);                  close(pipe_err);
   
                 return get_exit_status(pid); // negative may mean "-errno[execl()]"                  result.status=get_exit_status(pid); // negative may mean "-errno[execl()]"
         } else           } else 
                 throw Exception(0,                  throw Exception(0,
                         file_spec,                          file_spec,
                         "%s error: %s (%d)", pid<0?"fork":"pipe", strerror(errno), errno);                           "%s error: %s (%d)", pid<0?"fork":"pipe", strerror(errno), errno); 
 #endif  #endif
   
         return 0;          return result;
 }  }

Removed from v.1.48.2.10  
changed lines
  Added in v.1.48.2.12


E-mail: