From: Jean-Marc Pigeon (Delson) Date: Wed, 21 May 2025 20:49:06 +0000 (-0400) Subject: Better way to scan email incoming line X-Git-Tag: tag-0.8~89 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=b7587da7b364debca35c907d08bbefe45c8bcd99;p=jmp%2Fmailleur Better way to scan email incoming line --- diff --git a/data-feed/feed02.tst b/data-feed/feed02.tst index 4511058..0ab50ab 100644 --- a/data-feed/feed02.tst +++ b/data-feed/feed02.tst @@ -30,6 +30,9 @@ FIRST Line SECOND Line LAST Line +this is a line with a dot +.. +end . #------------------------------------------------------------------------- R:250 3.5.3 Message accepted for delivery diff --git a/data-feed/xxfeed.tst b/data-feed/xxfeed.tst index 4511058..0ab50ab 100644 --- a/data-feed/xxfeed.tst +++ b/data-feed/xxfeed.tst @@ -30,6 +30,9 @@ FIRST Line SECOND Line LAST Line +this is a line with a dot +.. +end . #------------------------------------------------------------------------- R:250 3.5.3 Message accepted for delivery diff --git a/lib/lvleml.c b/lib/lvleml.c index ad53518..e59a295 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -307,18 +307,14 @@ static _Bool getdata(CONTYP *contact) #define OPEP "lvleml.c:getdata," _Bool done; -char *line; _Bool empty; FILE *queue; -int got; int phase; _Bool proceed; done=false; -line=(char *)0; empty=false; queue=(FILE *)0; -got=0; phase=0; proceed=setdirectives(contact,"tmp"); while (proceed==true) { @@ -336,20 +332,33 @@ while (proceed==true) { (void) transmit(contact,"%d 3.5.0 %s", DATAOK,"End data with ."); break; - case 3 : //get incoming line - got=tcp_getline(contact->socptr,WAITLINE,&line); - if (got<0) //data timeout - phase=999; //Trouble trouble + case 3 : //get incoming line, detect 'single dot' as end + while (proceed==true) { + int completed; + int got; + char *line; + + completed=false; + got=tcp_getline(contact->socptr,WAITLINE,&line); + if (got<0) { //data timeout + phase=999; //trouble trouble + break; //exiting loop + } + if ((empty==false)||(strcmp(line,".")!=0)) { + if (strcmp(line,"..")==0) + line[1]='\000'; + (void) fprintf(queue,"%s\n",line); + } + else + completed=true; + empty=(strlen(line)==0); + line=rou_freestr(line); + if (completed==true) + break; + } break; case 4 : //just display line - if ((empty==false)||(strcmp(line,".")!=0)) { - (void) fprintf(queue,"%s\n",line); - phase=1; //Wait for next line - } empty=false; - if (strlen(line)==0) - empty=true; - line=rou_freestr(line); break; case 5 : //got all data if (eml_closeqfile(queue)<0)