| From 898e9514bc889b4a540f667efed95a5af101c824 Mon Sep 17 00:00:00 2001 |
| From: Li xin <lixin.fnst@cn.fujitsu.com> |
| Date: Tue, 2 Dec 2014 07:00:36 +0900 |
| Subject: [PATCH 1/3] From debian to fix compile errors |
| |
| Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com> |
| --- |
| src/Makefile.0 | 7 +++---- |
| src/autoconf | 64 +++++++++++++------------------------------------------- |
| src/comsat.c | 65 +++++++++++++++++++-------------------------------------- |
| src/fields.c | 6 +++--- |
| src/foldinfo.h | 2 +- |
| src/formail.c | 6 +++--- |
| src/formisc.c | 2 +- |
| src/formisc.h | 2 +- |
| src/mailfold.c | 14 ++++++++++--- |
| src/manconf.c | 2 +- |
| src/memblk.c | 24 ++++++++++----------- |
| src/memblk.h | 2 +- |
| src/network.h | 10 ++------- |
| src/pipes.c | 10 ++++----- |
| src/procmail.c | 3 +-- |
| src/recommend.c | 2 +- |
| 16 files changed, 81 insertions(+), 140 deletions(-) |
| |
| diff --git a/src/Makefile.0 b/src/Makefile.0 |
| index 6eb5b51..15a2039 100644 |
| --- a/src/Makefile.0 |
| +++ b/src/Makefile.0 |
| @@ -40,7 +40,7 @@ multigram: multigram.$(O) $(MG_OBJ) setid |
| @cd ..; $(MAKE) config.check |
| |
| _autotst: _autotst.$(O) sublib.c sublib.h |
| - $(CC) $(CFLAGS) $@.$(O) -o $@ $(LDFLAGS) |
| + gcc $@.$(O) -o $@ $(LDFLAGS) |
| |
| ../autoconf.h: autoconf Makefile ../patchlevel.h |
| @echo No this was not make -n >make_n |
| @@ -175,17 +175,16 @@ recommend: recommend.$(O) sublib.$(O) |
| |
| ../man/man.sed: manconf.c ../autoconf.h ../config.h includes.h procmail.h |
| ../man/man.sed: ../patchlevel.h |
| - @$(CC) $(CFLAGS) "-DBINDIR=\"$(VISIBLE_BINDIR)\"" -o _autotst \ |
| + gcc "-DBINDIR=\"$(VISIBLE_BINDIR)\"" -o _autotst \ |
| manconf.c $(LDFLAGS) |
| @./_autotst $@ |
| @echo Housekeeping file >$@ |
| - @$(RM) _autotst |
| |
| clean: |
| $(RM) -r _locktest |
| $(RM) procmail.$(O) $(PM_OBJ) lockfile.$(O) $(LF_OBJ) formail.$O \ |
| $(FM_OBJ) multigram.$(O) $(MG_OBJ) $(BINSS) multigram ../autoconf.h \ |
| - _autotst* lookfor _locktst* grepfor recommend recommend.$(O) manconf \ |
| + lookfor _locktst* grepfor recommend recommend.$(O) manconf \ |
| _Makefile lock.log *core* targetdir.h setid setid.$(O) gethome \ |
| gethome.$(O) make_n realloc.log |
| |
| diff --git a/src/autoconf b/src/autoconf |
| index 1cb4c42..ff78048 100755 |
| --- a/src/autoconf |
| +++ b/src/autoconf |
| @@ -68,8 +68,6 @@ |
| # #define NOfsync |
| #Ok #define endpwent() |
| #Ok #define endgrent() |
| -#Ok #define endhostent() |
| -#Ok #define endservent() |
| #Ok #define endprotoent() |
| # #define h_0addr_list h_addr |
| #Ok #define NOpw_passwd |
| @@ -896,7 +894,7 @@ int main(){int i=0; |
| {uid_t vuid_t;i+=vuid_t=1;} |
| {gid_t vgid_t;i+=vgid_t=1;} |
| #ifndef NO_COMSAT |
| - {struct hostent vhostent;i+=!(vhostent.h_addr_list=0);} |
| + {struct addrinfo res; i+=!(res.ai_socktype=0);} |
| #endif |
| #ifndef NOuname |
| {struct utsname vutsname;i+=!(*vutsname.nodename='\0');} |
| @@ -917,8 +915,6 @@ do |
| test -z "$i3" && grepfor mode_t 'typedef int mode_t;' && i3=I |
| test -z "$i4" && grepfor uid_t 'typedef int uid_t;' && i4=I |
| test -z "$i5" && grepfor gid_t 'typedef int gid_t;' && i5=I |
| - test -z "$i6" && grepfor h_addr_list '#define h_0addr_list h_addr' && i6=I |
| - test -z "$i6" && grepfor hostent '#define h_0addr_list h_addr' && i6=I |
| test -z "$i6" && grepfor member '#define h_0addr_list h_addr' && i6=I |
| test -z "$i7" && grepfor utsname "#define NOuname \ |
| /* <sys/utsname.h> is there, but empty */" && i7=I |
| @@ -1048,8 +1044,12 @@ int main(){char a[2]; |
| {struct utsname b;uname(&b);} |
| #endif |
| #ifndef NO_COMSAT |
| - gethostbyname("0");getprotobyname(COMSATprotocol);endhostent();endservent(); |
| - endprotoent(); |
| + { |
| + struct addrinfo *res, hints; |
| + memset(&hints, '\0', sizeof(hints)); |
| + if(getaddrinfo(COMSAThost,BIFF_serviceport,&hints,&res)) |
| + freeaddrinfo(res); |
| + } |
| #endif |
| _exit(0); |
| return 0;} |
| @@ -1103,14 +1103,9 @@ grepfor uname "\ |
| /* <sys/utsname.h> defines it, the libraries don't */" |
| grepfor endpwent '#define endpwent()' |
| grepfor endgrent '#define endgrent()' |
| -if grepfor gethostbyname '#define NO_COMSAT' |
| +if grepfor getaddrinfo '#define NO_COMSAT' |
| then |
| : |
| -else |
| - grepfor getprotobyname '#define UDP_protocolno 17' |
| - grepfor endhostent '#define endhostent()' |
| - grepfor endservent '#define endservent()' |
| - grepfor endprotoent '#define endprotoent()' |
| fi |
| grepfor strstr '#define SLOWstrstr' || |
| grepfor clock '#define SLOWstrstr' |
| @@ -1239,39 +1234,9 @@ int main(argc,argv)int argc;const char*argv[]; |
| printf("/* Insufficient memory to perform the benchmark! */\n"); |
| #endif /* SLOWstrstr */ |
| #ifndef NO_COMSAT |
| -#ifndef UDP_protocolno |
| - ;{ const struct protoent*p; |
| - if(p=getprotobyname(COMSATprotocol)) |
| - { printf("#define UDP_protocolno %d\n",p->p_proto); |
| -#else |
| - ;{ if(1) |
| - { |
| -#endif |
| - ;{ const struct servent*serv; |
| - if(serv=getservbyname(COMSATservice,COMSATprotocol)) |
| - printf("#define BIFF_serviceport \"%d\"\n", |
| - ntohs(serv->s_port)); |
| - } |
| -#ifdef AF_INET |
| - ;{ const struct hostent*host; |
| - if(!strcmp("localhost",COMSAThost)&& |
| - (host=gethostbyname(COMSAThost))&& |
| - host->h_0addr_list&&host->h_addrtype==AF_INET&& |
| - host->h_length) |
| - { int j=host->h_length; |
| - const unsigned char*ad=(void*)host->h_0addr_list; |
| - printf("#define IP_localhost {"); |
| - printf("%d",*ad++); |
| - while(--j) |
| - printf(",%d",*ad++); |
| - puts("}"); |
| - } |
| - } |
| +#ifndef AF_INET |
| + puts("#define NO_COMSAT"); |
| #endif /* AF_INET */ |
| - } |
| - else |
| - puts("#define NO_COMSAT"); |
| - } |
| #endif /* NO_COMSAT */ |
| ;{ unsigned long s=(size_t)~0;int bits; |
| for(bits=1;s>>=1;bits++); |
| @@ -1470,15 +1435,14 @@ cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL | |
| grep 'Mlocal.*procmail' >$DEVNULL || |
| echo '#define CF_no_procmail_yet' >>$ACONF |
| |
| -cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL | |
| - grep '^V' >$DEVNULL || |
| - echo '#define buggy_SENDMAIL' >>$ACONF |
| +# cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL | |
| +# grep '^V' >$DEVNULL || |
| +# echo '#define buggy_SENDMAIL' >>$ACONF |
| |
| lpath='/bin' |
| bins="/bin" |
| |
| -for newd in /usr/bin /usr/ucb /usr/5bin $BINDIR /local/bin /usr/local/bin \ |
| - /global/bin /usr/bin/X11 /usr/X*/bin |
| +for newd in /usr/bin $BINDIR /usr/bin/X11 /usr/X*/bin |
| do |
| if test -d $newd |
| then |
| diff --git a/src/comsat.c b/src/comsat.c |
| index 77dba34..5082b16 100644 |
| --- a/src/comsat.c |
| +++ b/src/comsat.c |
| @@ -27,7 +27,8 @@ static /*const*/char rcsid[]= |
| #include "comsat.h" |
| |
| static int csvalid; /* is it turned on with a good address? */ |
| -static struct sockaddr_in csaddr; |
| +static struct addrinfo cai; |
| +static struct sockaddr *csaddr; |
| static char*cslastf,*cslgname; |
| |
| void setlfcs(folder)const char*folder; /* set lastfolder for comsat */ |
| @@ -62,56 +63,32 @@ void setlgcs(name)const char*name; /* set logname for comsat */ |
| } |
| |
| int setcomsat(chp)const char*chp; |
| -{ char*chad;int newvalid; struct sockaddr_in newaddr; |
| +{ char*chad;int newvalid; struct addrinfo *res, hints; |
| chad=strchr(chp,SERV_ADDRsep); /* @ separator? */ |
| if(!chad&&!renvint(-1L,chp)) |
| return csvalid=0; /* turned off comsat */ |
| newvalid=1; |
| if(chad) |
| *chad++='\0'; /* split the specifier */ |
| + if(!chad||!*chp) /* no service */ |
| + chp=BIFF_serviceport; /* new balls please! */ |
| if(!chad||!*chad) /* no host */ |
| -#ifndef IP_localhost /* Is "localhost" preresolved? */ |
| chad=COMSAThost; /* nope, use default */ |
| -#else /* IP_localhost */ |
| - { static const unsigned char ip_localhost[]=IP_localhost; |
| - newaddr.sin_family=AF_INET; |
| - tmemmove(&newaddr.sin_addr,ip_localhost,sizeof ip_localhost); |
| - } |
| - else |
| -#endif /* IP_localhost */ |
| - { const struct hostent*host; /* what host? paranoid checks */ |
| - if(!(host=gethostbyname(chad))||!host->h_0addr_list) |
| - { bbzero(&newaddr.sin_addr,sizeof newaddr.sin_addr); |
| - newvalid=0; /* host can't be found, too bad */ |
| - } |
| - else |
| - { newaddr.sin_family=host->h_addrtype; /* address number found */ |
| - tmemmove(&newaddr.sin_addr,host->h_0addr_list,host->h_length); |
| - } |
| - endhostent(); |
| - } |
| - if(newvalid) /* so far, so good */ |
| - { int s; |
| - if(!*chp) /* no service */ |
| - chp=BIFF_serviceport; /* new balls please! */ |
| - s=strtol(chp,&chad,10); |
| - if(chp!=chad) /* the service is not numeric */ |
| - newaddr.sin_port=htons((short)s); /* network order */ |
| - else |
| - { const struct servent*serv; |
| - serv=getservbyname(chp,COMSATprotocol); /* so get its no. */ |
| - if(serv) |
| - newaddr.sin_port=serv->s_port; |
| - else |
| - { newaddr.sin_port=htons((short)0); /* no such service */ |
| - newvalid=0; |
| - } |
| - endservent(); |
| - } |
| - } |
| + bzero(&hints,sizeof(hints)); |
| + hints.ai_socktype=SOCK_DGRAM; |
| + hints.ai_flags=AI_ADDRCONFIG; |
| + if(getaddrinfo(chad,chp,&hints,&res)) |
| + newvalid=0; |
| + |
| onguard(); /* update the address atomically */ |
| if(csvalid=newvalid) |
| - tmemmove(&csaddr,&newaddr,sizeof(newaddr)); |
| + { if(csaddr) |
| + free(csaddr); |
| + csaddr=malloc(res->ai_addrlen); |
| + tmemmove(csaddr,res->ai_addr,res->ai_addrlen); |
| + tmemmove(&cai,res,sizeof(cai)); |
| + freeaddrinfo(res); |
| + } |
| offguard(); |
| return newvalid; |
| } |
| @@ -120,7 +97,7 @@ void sendcomsat(folder)const char*folder; |
| { int s;const char*p; |
| if(!csvalid||!buf) /* is comat on and set to a valid address? */ |
| return; |
| - if(!*cslgname||strlen(cslgname)+2>linebuf) /* is $LOGNAME bogus? */ |
| + if(!cslgname||!*cslgname||strlen(cslgname)+2>linebuf)/* is $LOGNAME bogus? */ |
| return; |
| if(!(p=folder?folder:cslastf)) /* do we have a folder? */ |
| return; |
| @@ -132,8 +109,8 @@ void sendcomsat(folder)const char*folder; |
| } |
| strlcat(buf,COMSATxtrsep,linebuf); /* custom seperator */ |
| strlcat(buf,p,linebuf); /* where was it delivered? */ |
| - if((s=socket(AF_INET,SOCK_DGRAM,UDP_protocolno))>=0) |
| - { sendto(s,buf,strlen(buf),0,(struct sockaddr*)&csaddr,sizeof(csaddr)); |
| + if((s=socket(cai.ai_family,cai.ai_socktype,cai.ai_protocol))>=0) |
| + { sendto(s,buf,strlen(buf),0,csaddr,cai.ai_addrlen); |
| rclose(s); |
| yell("Notified comsat:",buf); |
| } |
| diff --git a/src/fields.c b/src/fields.c |
| index a2bd77f..37ed154 100644 |
| --- a/src/fields.c |
| +++ b/src/fields.c |
| @@ -110,16 +110,16 @@ void dispfield(p)register const struct field*p; |
| /* try and append one valid field to rdheader from stdin */ |
| int readhead P((void)) |
| { int idlen; |
| - getline(); |
| + get_line(); |
| if((idlen=breakfield(buf,buffilled))<=0) /* not the start of a valid field */ |
| return 0; |
| if(idlen==STRLEN(FROM)&&eqFrom_(buf)) /* it's a From_ line */ |
| { if(rdheader) |
| return 0; /* the From_ line was a fake! */ |
| - for(;buflast=='>';getline()); /* gather continued >From_ lines */ |
| + for(;buflast=='>';get_line()); /* gather continued >From_ lines */ |
| } |
| else |
| - for(;;getline()) /* get the rest of the continued field */ |
| + for(;;get_line()) /* get the rest of the continued field */ |
| { switch(buflast) /* will this line be continued? */ |
| { case ' ':case '\t': /* yep, it sure is */ |
| continue; |
| diff --git a/src/foldinfo.h b/src/foldinfo.h |
| index 9e4ebb6..797f9be 100644 |
| --- a/src/foldinfo.h |
| +++ b/src/foldinfo.h |
| @@ -10,7 +10,7 @@ |
| |
| #define ft_lock(type) ((type)>ft_MAILDIR) /* kernel lock fd */ |
| #define ft_atime(type) ((type)==ft_FILE) /* force atime < mtime */ |
| -#define ft_dotlock(type) ((type)==ft_FILE) /* dotlock $DEFAULT */ |
| +#define ft_dotlock(type) ((type)>ft_MAILDIR) /* dotlock $DEFAULT */ |
| #define ft_delim(type) ((type)==ft_FILE) /* add MMDF delim */ |
| #define ft_checkcloser(type) ((type)>ft_MH) |
| #define ft_forceblank(type) ((type)!=ft_MAILDIR) /* force blank line at end */ |
| diff --git a/src/formail.c b/src/formail.c |
| index fe5e6be..1f5c9dd 100644 |
| --- a/src/formail.c |
| +++ b/src/formail.c |
| @@ -758,9 +758,9 @@ startover: |
| lputssn(buf,buffilled),ctlength-=buffilled,buffilled=lnl=0; |
| ;{ int tbl=buflast,lwr='\n'; |
| while(--ctlength>=0&&tbl!=EOF) /* skip Content-Length: bytes */ |
| - lnl=lwr==tbl&&lwr=='\n',putcs(lwr=tbl),tbl=getchar(); |
| + lnl=lwr==tbl&&lwr=='\n',lputcs(lwr=tbl),tbl=getchar(); |
| if((buflast=tbl)=='\n'&&lwr!=tbl) /* just before a line break? */ |
| - putcs('\n'),buflast=getchar(); /* wrap up loose end */ |
| + lputcs('\n'),buflast=getchar(); /* wrap up loose end */ |
| } |
| if(!quiet&&ctlength>0) |
| { charNUM(num,ctlength); |
| @@ -819,7 +819,7 @@ splitit: { if(!lnl) /* did the previous mail end with an empty line? */ |
| { if(split) /* gobble up the next start separator */ |
| { buffilled=0; |
| #ifdef sMAILBOX_SEPARATOR |
| - getline();buffilled=0; /* but only if it's defined */ |
| + get_line();buffilled=0; /* but only if it's defined */ |
| #endif |
| if(buflast!=EOF) /* if any */ |
| goto splitit; |
| diff --git a/src/formisc.c b/src/formisc.c |
| index d6cab90..338733b 100644 |
| --- a/src/formisc.c |
| +++ b/src/formisc.c |
| @@ -115,7 +115,7 @@ void loadchar(c)const int c; /* append one character to buf */ |
| buf[buffilled++]=c; |
| } |
| |
| -int getline P((void)) /* read a newline-terminated line */ |
| +int get_line P((void)) /* read a newline-terminated line */ |
| { if(buflast==EOF) /* at the end of our Latin already? */ |
| { loadchar('\n'); /* fake empty line */ |
| return EOF; /* spread the word */ |
| diff --git a/src/formisc.h b/src/formisc.h |
| index 1c4ca20..f25211c 100644 |
| --- a/src/formisc.h |
| +++ b/src/formisc.h |
| @@ -17,4 +17,4 @@ void |
| char* |
| skipwords P((char*start)); |
| int |
| - getline P((void)); |
| + get_line P((void)); |
| diff --git a/src/mailfold.c b/src/mailfold.c |
| index 917b502..6c8bcf4 100644 |
| --- a/src/mailfold.c |
| +++ b/src/mailfold.c |
| @@ -30,6 +30,7 @@ static /*const*/char rcsid[]= |
| |
| int logopened,rawnonl; |
| off_t lasttell; |
| +static int trunced; |
| static long lastdump; |
| static volatile int mailread; /* if the mail is completely read in already */ |
| static struct dyna_array confield; /* escapes, concatenations */ |
| @@ -81,6 +82,7 @@ long dump(s,type,source,len)const int s,type;const char*source; |
| long len; |
| { int i;long part; |
| lasttell=i= -1;SETerrno(EBADF); |
| + trunced=0; |
| if(s>=0) |
| { if(ft_lock(type)&&(lseek(s,(off_t)0,SEEK_END),fdlock(s))) |
| nlog("Kernel-lock failed\n"); |
| @@ -120,13 +122,18 @@ jin: while(part&&(i=rwrite(s,source,BLKSIZ<part?BLKSIZ:(int)part))) |
| } |
| writefin: |
| i=type!=ft_PIPE&&fsync(s)&&errno!=EINVAL; /* EINVAL => wasn't a file */ |
| + if ((i||len)&&lasttell>=0) |
| + { int serrno=errno; |
| + if(!ftruncate(s,lasttell)) trunced=1; |
| + SETerrno(serrno); |
| + } |
| if(ft_lock(type)) |
| { int serrno=errno; /* save any error information */ |
| if(fdunlock()) |
| nlog("Kernel-unlock failed\n"); |
| SETerrno(serrno); |
| } |
| - i=rclose(s)||i; |
| + i=rclose(s)||i; /* if this fails, we should truncate, but it's too late */ |
| } /* return an error even if nothing was to be sent */ |
| return i&&!len?-1:len; |
| } |
| @@ -237,7 +244,7 @@ dumpf: { switch(errno) |
| #endif |
| default:writeerr(buf); |
| } |
| - if(lasttell>=0&&!truncate(boxname,lasttell)&&(logopened||verbose)) |
| + if(lasttell>=0&&trunced&&(logopened||verbose)) |
| nlog("Truncated file to former size\n"); /* undo garbage */ |
| ret0: return 0; |
| } |
| @@ -378,7 +385,8 @@ void readmail(rhead,tobesent)const long tobesent; |
| dfilled=mailread=0; |
| else if(rhead) /* only read in a new header */ |
| { memblk new; |
| - dfilled=mailread=0;makeblock(&new,0);readdyn(&new,&dfilled,0); |
| + dfilled=mailread=0;makeblock(&new,0); |
| + readdyn(&new,&dfilled,thebody-themail.p); |
| if(tobesent>dfilled&&isprivate) /* put it in place here */ |
| { tmemmove(themail.p+dfilled,thebody,filled-=tobesent); |
| tmemmove(themail.p,new.p,dfilled); |
| diff --git a/src/manconf.c b/src/manconf.c |
| index a9e9f1c..5c8ec36 100644 |
| --- a/src/manconf.c |
| +++ b/src/manconf.c |
| @@ -233,7 +233,7 @@ a security violation was found (e.g. \1.B \2-@PRESERVOPT@\1or variable\ |
| \2-@PRESERVOPT@\1and\1.BR \2-@FROMWHOPT@ .\1"); |
| pc("LMTPOPT",LMTPOPT); |
| #else |
| - ps("LMTPOPTdesc","");ps("LMTPusage",""); |
| + ps("LMTPOPTdesc","");ps("LMTPusage","\1"); |
| #endif |
| pname("INIT_UMASK",0);printf("0%lo/g\n",(unsigned long)INIT_UMASK);lines--; |
| pn("DEFlinebuf",DEFlinebuf); |
| diff --git a/src/memblk.c b/src/memblk.c |
| index e2f13f0..97e02d3 100644 |
| --- a/src/memblk.c |
| +++ b/src/memblk.c |
| @@ -51,11 +51,11 @@ void lockblock(mb)memblk*const mb; |
| { |
| #ifdef USE_MMAP |
| if(mb->fd>=0) |
| - { long len=mb->len+1; |
| - if(munmap(mb->p,len)) |
| - mmapfailed(len); /* don't want to continue here */ |
| - if((mb->p=mmap(0,len,PROT_READ,MAP_PRIVATE,mb->fd,(off_t)0))==MAP_FAILED) |
| - mmapfailed(len); |
| + { long mlen=mb->len+1; |
| + if(munmap(mb->p,mlen)) |
| + mmapfailed(mlen); /* don't want to continue here */ |
| + if((mb->p=mmap(0,mlen,PROT_READ,MAP_PRIVATE,mb->fd,(off_t)0))==MAP_FAILED) |
| + mmapfailed(mlen); |
| close(mb->fd); |
| mb->fd=ropen(devnull,O_RDWR,0); /* XXX Perhaps -1 is better? */ |
| } |
| @@ -77,8 +77,8 @@ int resizeblock(mb,len,nonfatal)memblk*const mb;const long len; |
| strcpy(filename,MMAP_DIR); |
| if(unique(filename,strchr(filename,'\0'),MMAP_FILE_LEN,MMAP_PERM,0,0)&& |
| (mb->fd=ropen(filename,O_RDWR,MMAP_PERM),unlink(filename),mb->fd>=0)) |
| - { mb->filelen=len; |
| - if(lseek(mb->fd,mb->filelen-1,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) |
| + { mb->filelen=len+1; |
| + if(lseek(mb->fd,len,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) |
| dropf: { close(mb->fd);mb->fd= -1; |
| if(verbose)nlog("Unable to extend or use tempfile"); |
| } |
| @@ -98,9 +98,9 @@ dropf: { close(mb->fd);mb->fd= -1; |
| } |
| } |
| if(mb->fd>=0) |
| - { if(len>mb->filelen) /* need to extend? */ |
| - { mb->filelen=len; |
| - if(lseek(mb->fd,mb->filelen-1,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) |
| + { if(len>=mb->filelen) /* need to extend? */ |
| + { mb->filelen=len+1; |
| + if(lseek(mb->fd,len,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) |
| { char*p=malloc(len+1); /* can't extend, switch to malloc */ |
| tmemmove(p,mb->p,mb->len); |
| munmap(mb->p,mb->len+1); |
| @@ -124,9 +124,9 @@ mmap: if((mb->p=mmap(0,len+1,P_RW,MAP_SHARED,mb->fd,(off_t)0))==MAP_FAILED) |
| } |
| else |
| mb->p=realloc(mb->p,len+1); |
| - mb->len=len+1; |
| - mb->p[len]='\0'; |
| + mb->len=len; |
| ret1: |
| + mb->p[len]='\0'; |
| return 1; |
| } |
| |
| diff --git a/src/memblk.h b/src/memblk.h |
| index 6fd1d1d..b57f369 100644 |
| --- a/src/memblk.h |
| +++ b/src/memblk.h |
| @@ -1,6 +1,6 @@ |
| typedef struct memblk { |
| char*p; /* where it starts */ |
| - long len; /* currently allocated size */ |
| + long len; /* current size, not including trailing NUL */ |
| #ifdef USE_MMAP |
| off_t filelen; /* how long is the file */ |
| int fd; /* file which is mmap()ed */ |
| diff --git a/src/network.h b/src/network.h |
| index d7d08f2..b09b6c4 100644 |
| --- a/src/network.h |
| +++ b/src/network.h |
| @@ -1,19 +1,13 @@ |
| /*$Id: network.h,v 1.7 1997/04/02 03:15:41 srb Exp $*/ |
| |
| -#include <sys/socket.h> /* socket() sendto() AF_INET |
| +#include <sys/socket.h> /* socket() sendto() */ |
| /* SOCK_DGRAM */ |
| -#include <netdb.h> /* gethostbyname() getservbyname() |
| - /* getprotobyname() */ |
| -#include <netinet/in.h> /* htons() struct sockaddr_in */ |
| +#include <netdb.h> /* getaddrinfo() */ |
| |
| #ifndef BIFF_serviceport |
| #define BIFF_serviceport COMSATservice |
| #endif |
| |
| -#ifndef h_0addr_list |
| -#define h_0addr_list h_addr_list[0] /* POSIX struct member */ |
| -#endif |
| - |
| #ifndef NO_const /* since network.h is outside the autoconf const check */ |
| #ifdef const /* loop, we need this backcheck for some systems */ |
| #undef const |
| diff --git a/src/pipes.c b/src/pipes.c |
| index 1fdb9e6..7754300 100644 |
| --- a/src/pipes.c |
| +++ b/src/pipes.c |
| @@ -145,7 +145,9 @@ int pipthrough(line,source,len)char*line,*source;const long len; |
| if(Stdout) |
| { *(eq=strchr(Stdout,'\0')-1)='\0'; /* chop the '=' */ |
| if(!(backblock=getenv(Stdout))) /* no current value? */ |
| - PRDB=PWRB= -1; |
| + { PRDB=PWRB= -1; |
| + backlen=0; |
| + } |
| else |
| { backlen=strlen(backblock); |
| goto pip; |
| @@ -155,9 +157,7 @@ int pipthrough(line,source,len)char*line,*source;const long len; |
| pip: rpipe(pbackfd); |
| rpipe(pinfd); /* main pipes setup */ |
| if(!(pidchild=sfork())) /* create a sending procmail */ |
| - { if(Stdout&&backblock) |
| - backlen=strlen(backblock); |
| - else |
| + { if(!Stdout) |
| backblock=source,backlen=len; |
| childsetup();rclose(PRDI);rclose(PRDB); |
| rpipe(poutfd);rclose(STDOUT); |
| @@ -194,7 +194,7 @@ perr: progerr(line,excode,pwait==4); /* I'm going to tell my mommy! */ |
| makeblock(&temp,Stdfilled); |
| tmemmove(temp.p,Stdout,Stdfilled); |
| readdyn(&temp,&Stdfilled,Stdfilled+backlen+1); |
| - Stdout=realloc(Stdout,&Stdfilled+1); |
| + Stdout=realloc(Stdout,Stdfilled+1); |
| tmemmove(Stdout,temp.p,Stdfilled+1); |
| freeblock(&temp); |
| retStdout(Stdout,pwait&&pipw,!backblock); |
| diff --git a/src/procmail.c b/src/procmail.c |
| index 4a232f2..2bb449b 100644 |
| --- a/src/procmail.c |
| +++ b/src/procmail.c |
| @@ -652,8 +652,7 @@ commint:do skipspace(); /* skip whitespace */ |
| nrcond= -1; |
| if(tolock) /* clear temporary buffer for lockfile name */ |
| free(tolock); |
| - for(i=maxindex(flags);i;i--) /* clear the flags */ |
| - flags[i]=0; |
| + bbzero(flags,sizeof(flags)); /* clear the flags */ |
| for(tolock=0,locknext=0;;) |
| { chp=skpspace(chp); |
| switch(i= *chp++) |
| diff --git a/src/recommend.c b/src/recommend.c |
| index 5d41e01..9002268 100644 |
| --- a/src/recommend.c |
| +++ b/src/recommend.c |
| @@ -47,7 +47,7 @@ int main(argc,argv)const int argc;const char*const argv[]; |
| printf("chmod %lo %s\n",(unsigned long)(sgid|PERMIS),argv[2]); |
| else if(chmdir==1) |
| goto nogchmod; |
| - if(chmdir) |
| + if(0) |
| printf("chmod %c+w %s/.\n",chmdir==1?'g':'a',mailspooldir); |
| nogchmod: |
| return EXIT_SUCCESS; |
| -- |
| 1.8.4.2 |
| |