PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eine frage zum verständnis von patchfiles



meinereinerseiner
13-02-2007, 19:33
hallo,

habe hier ein etwas älteres patchfile, bei welchen ich die syntax nicht verstehe und ich kann es nicht mit dem "patch" befehl anwenden.


*** qmail-smtpd.c.dist Thu Jan 9 00:17:06 1997
--- qmail-smtpd.c Thu Jan 9 00:44:49 1997
***************
*** 140,156 ****
switch(state)
{
case 0:
! if (ch == '\n') straynewline();
if (ch == '\r') { state = 4; continue; }
break;
case 1: /* \r\n */
- if (ch == '\n') straynewline();
if (ch == '.') { state = 2; continue; }
if (ch == '\r') { state = 4; continue; }
! state = 0;
break;
case 2: /* \r\n + . */
! if (ch == '\n') straynewline();
if (ch == '\r') { state = 3; continue; }
state = 0;
break;
--- 140,155 ----
switch(state)
{
case 0:
! if (ch == '\n') { state = 1; break; }
if (ch == '\r') { state = 4; continue; }
break;
case 1: /* \r\n */
if (ch == '.') { state = 2; continue; }
if (ch == '\r') { state = 4; continue; }
! if (ch != '\n') state = 0;
break;
case 2: /* \r\n + . */
! if (ch == '\n') return; /* this is what sendmail-8.8.4 does -djg */
if (ch == '\r') { state = 3; continue; }
state = 0;
break;

und hier die stelle im orginal quelltext:

switch(state) {
case 0:
if (ch == '\n') straynewline();
if (ch == '\r') { state = 4; continue; }
break;
case 1: /* \r\n */
if (ch == '\n') straynewline();
if (ch == '.') { state = 2; continue; }
if (ch == '\r') { state = 4; continue; }
state = 0;
break;
case 2: /* \r\n + . */
if (ch == '\n') straynewline();
if (ch == '\r') { state = 3; continue; }
state = 0;
break;


sehe ich das richtig, das lt. patchfile, der code nach dem patchen so aussehen sollte:

switch(state) {
case 0:
if (ch == '\n') { state = 1; break; }
if (ch == '\r') { state = 4; continue; }
break;
case 1: /* \r\n */
if (ch == '.') { state = 2; continue; }
if (ch == '\r') { state = 4; continue; }
if (ch != '\n') state = 0;
break;
case 2: /* \r\n + . */
if (ch == '\n') return; /* this is what sendmail-8.8.4 does -djg */
if (ch == '\r') { state = 3; continue; }
state = 0;
break;


danke

der tom

SeeksTheMoon
14-02-2007, 08:33
Patches können verschieden aufgebaut sein: context (unified, old-style, new-style) oder normal. Du musst nachsehen was das ist und wie man das Format mit dem Patch-Kommando benutzt.