--- parser3/src/main/pa_exec.C 2001/04/09 16:04:50 1.1 +++ parser3/src/main/pa_exec.C 2001/04/24 07:58:14 1.4 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan (http://design.ru/paf) - $Id: pa_exec.C,v 1.1 2001/04/09 16:04:50 paf Exp $ + $Id: pa_exec.C,v 1.4 2001/04/24 07:58:14 paf Exp $ */ #include "pa_config_includes.h" @@ -101,14 +101,14 @@ error: return FALSE; } -static read_pipe(String& result, HANDLE hOutRead, const char *file_spec){ +static void read_pipe(String& result, HANDLE hOutRead, const char *file_spec){ while(true) { char *buf=(char *)result.pool().malloc(MAX_STRING); unsigned long size; ReadFile( hOutRead, buf, MAX_STRING, &size, NULL ); if(!size) break; - result.APPEND_CLEAN(buf, size, file_spec, 0); + result.APPEND_AS_IS(buf, size, file_spec, 0); } } @@ -116,17 +116,18 @@ static read_pipe(String& result, HANDLE static const char *buildCommand(Pool& pool, const String& origin_string, const char *file_spec_cstr, const Array *argv) { - FILE *f=fopen(file_spec_cstr, "r"); - if(f) { + if(FILE *f=fopen(file_spec_cstr, "r")) { char buf[MAX_STRING]; size_t size=fread(buf, 1, MAX_STRING-1, f); if(size>2) { buf[size]=0; if(strncmp(buf, "#!", 2)==0) { - char *atEOL=strchr(buf, '\n'); - if(atEOL) { + const char *begin=buf+2; + if(*begin==' ') // alx: were an old magic for some linux-es + begin++; + if(char *end=strchr(begin, '\n')) { String string(pool); - string.APPEND_CLEAN(buf+2, atEOL-(buf+2), + string.APPEND_AS_IS(begin, end-begin, origin_string.origin().file, 0); string << " " << file_spec_cstr; if(argv) @@ -255,13 +256,13 @@ static int get_exit_status(int pid) { WEXITSTATUS(status) : -2; } -static read_pipe(String& result, int file, const char *file_spec){ +static void read_pipe(String& result, int file, const char *file_spec){ while(true) { - char *buf=(char *)pool.malloc(MAX_STRING); + char *buf=(char *)result.pool().malloc(MAX_STRING); size_t size=read(file, buf, MAX_STRING); if(!size) break; - result.APPEND_CLEAN(buf, size, file_spec, 0); + result.APPEND_AS_IS(buf, size, file_spec, 0); } } @@ -272,13 +273,13 @@ static void append_env_pair(const Hash:: String& string=*static_cast(info); string << key << "=" << *static_cast(value); - string.APPEND_CLEAN("", 1, 0, 0); // zero byte + string.APPEND_AS_IS("", 1, 0, 0); // zero byte #else String string(key.pool()); string << key << "=" << *static_cast(value); - char **env_ptr=static_cast(info); - *env_ptr++=string.cstr(); + char ***env_ref=static_cast(info); + **env_ref=string.cstr(); (*env_ref)++; #endif } int pa_exec(const String& file_spec, @@ -342,25 +343,25 @@ from http://www.apache.org/websrc/cvsweb #else int pipe_write, pipe_read, pipe_err; - const char *argv_cstr[5]={"", "", "", "", ""}; + const char *argv_cstrs[5]={"", "", "", "", ""}; if(argv) { int size=min(5, argv->size()); for(int i=0; iget_string(i).cstr(String::UL_AS_IS); + argv_cstrs[i]=argv->get_string(i)->cstr(String::UL_AS_IS); } - const char *file_spec_cstr=file_spec->cstr(String::UL_FILE_NAME); - char **env_cstr=0; + const char *file_spec_cstr=file_spec.cstr(String::UL_FILE_NAME); + char **env_cstrs=0; if(env) { - env_cstr_array= + env_cstrs= (char **)env->pool().malloc(sizeof(char *)*(env->size()+1/*0*/)); - char **env_ptr=env_cstr_array; - env->for_each(append_env_pair, &env_ptr); - *env_ptr=0; + char **env_ref=env_cstrs; + env->for_each(append_env_pair, &env_ref); + *env_ref=0; } - if(int pid=execle_piped(sendmail_filespec, + if(int pid=execle_piped( file_spec_cstr, - argv_cstr[0], argv_cstr[1], argv_cstr[2], argv_cstr[3], argv_cstr[4], - env_cstr, + argv_cstrs[0], argv_cstrs[1], argv_cstrs[2], argv_cstrs[3], argv_cstrs[4], + env_cstrs, &pipe_write, &pipe_read, &pipe_err)) { const char *in_cstr=in.cstr(String::UL_AS_IS); @@ -374,7 +375,7 @@ from http://www.apache.org/websrc/cvsweb return get_exit_status(pid); // negative may mean "-errno[execl()]" } else PTHROW(0, 0, - file_spec, + &file_spec, "pipe error"); #endif