#ifdef RCS
static char rcsid[]=
"$Id: common.c,v 1.28 2001/06/23 08:18:39 guenther Exp $";
#endif
#include "procmail.h"
#include "sublib.h"
#include "robust.h"
#include "shell.h"
#include "misc.h"
#include "common.h"
void shexec(argv)const char*const*argv;
{ int i;char**newargv;const char**p;
#ifdef SIGXCPU
signal(SIGXCPU,SIG_DFL);signal(SIGXFSZ,SIG_DFL);
#endif
#ifdef SIGLOST
signal(SIGLOST,SIG_DFL);
#endif
signal(SIGPIPE,SIG_DFL);execvp(*argv,(char*const*)argv);
for(p=(const char**)argv,i=1;i++,*p++;);
newargv=malloc(i*sizeof*p);
for(*(p=(const char**)newargv)=binsh;*++p= *argv++;);
execv(*newargv,newargv);free(newargv);nlog("Failed to execute");
logqnl(*argv);
exit(EX_UNAVAILABLE);
}
void detab(p)char*p;
{ while(p=strpbrk(p,"\t\n\v\f\r"))
*p=' ';
}
char*skpspace(chp)const char*chp;
{ for(;;chp++)
switch(*chp)
{ case ' ':case '\t':
continue;
default:
return (char*)chp;
}
}
#ifdef NOstrcspn
int strcspn(whole,sub)const char*const whole,*const sub;
{ const register char*p;
p=whole;
while(*p&&!strchr(sub,*p))
p++;
return p-whole;
}
#endif
int waitfor(pid)const pid_t pid;
{ int i;pid_t j;
while(pid!=(j=wait(&i))||WIFSTOPPED(i))
if(-1==j)
return NO_PROCESS;
else if(!pid)
break;
return lexitcode=WIFEXITED(i)?WEXITSTATUS(i):-WTERMSIG(i);
}
#ifdef NOstrncasecmp
int strncasecmp(a,b,l)register const char*a,*b;register size_t l;
{ unsigned i,j;
if(l)
do
{ while(*a&&*a==*b&&--l)
a++,b++;
if(!l)
break;
if((i= *a++)-'A'<='Z'-'A')
i+='a'-'A';
if((j= *b++)-'A'<='Z'-'A')
j+='a'-'A';
if(j!=i)
return i>j?1:-1;
}
while(i&&j&&--l);
return 0;
}
#endif