Das Zeilenende-Problem bei Avanti

Edmund Wollgarten wollgarten at bth.rwth-aachen.de
Fr Sep 26 14:55:25 CEST 2003


Hallo Herr Butkus,

ich stimme Ihnen voll und ganz zu!

Martin Butkus schrieb:

>Liebe Frau Koczian, liebe Liste,
>
>ich habe die Problematik des "\r\r\n"-Zeilenendes inzwischen analysiert, 
>und hätte gerne Rückmeldungen zu der Lösung, die ich implementieren möchte.
>
>1. Das Zeilenende wurde bislang in den alten Versionen von  Avanti-W 
>   und Avanti-X unterschiedlich gehandhabt. Avanti-X verwendete "\n",
>   Avanti-W "\r\n". [ In den Parameterdateien wurde dagegen der 
>   "ze"-Parameter ausgewertet und unverändert übernommen. ]
>
>   Das allein ist schon unschön, weil ein Client ja nicht wissen kann,
>   ob er mit einem Unix- oder einem Windows-Avanti-Server spricht. 
>
>2. Avanti-CL gibt seine Daten über den Standardausgabekanal aus, 
>   der normalerweise im sog. Text-Modus geöffnet ist. Damit wird 
>   automatisch eine Übersetzung \n -> \r\n vorgenommen, und zwar
>   für *jede* Ausgabe. Entsprechend wird \r\n nach \r\r\n übersetzt, 
>   auf diese Weise kommt das von Frau Koczian geschilderte Problem 
>   zustande.
>
>   Eine ähnliche Problematik betrifft übrigens die Standardeingabe und
>   den Standardfehlerkanal.
>
>   [ Die Binär- vs. Textmodus-Problematik ist übrigens uralt, und
>     verursacht regelmäßig Bauchschmerzen bei allen, die damit zu tun
>     haben.  Das liegt in der Natur der Sache: die Einführung des
>     Textmodus war ein Hack, der notwendig wurde, als sich Microsoft
>     dazu entschieden hatte, in DOS "\r\n" als Zeilenende zu verwenden,
>     statt "\n", wie damals (und unter Unix noch heute) üblich. ]
>
>Sinnvoll wäre es m.E. in jedem Fall, wenn sich Unix- und Windows-Variante 
>des Servers identisch verhalten würden. 
> 
>Lösungsvorschlag:
>
>-  avanti-cl betreibt alle seine Ein- und Ausgabekanäle nicht im Text-, 
>   sondern im Binärmodus, wo es keinerlei Übersetzung gibt. (Dies ist 
>   auch die einzige unter Unix verfügbare Betriebsart). 
>
>   Das hätte zur Konsequenz, daß für die "internen" Ausgaben, also 
>   z.B. das Ergebnis eines "list"-Befehls, unter Windows
>   nicht mehr "\r\n" sondern "\n" als Zeilenende-Marker verwendet wird.
>
>   Die Zeilenende-Markierung in den Parameterdateien richtet sich nach
>   dem "ze"-Parameter, und wird dann unverfälscht übernommen. 
>
>-  Um mit den "anderen Zeilenenden" konsistent zu bleiben, wäre die 
>   Einstellung "ze = 10" sinnvoll (sowohl unter Unix als auch unter Windows).
>
>-  Als "einheitlicher Zeilenendemarker" würde also "\n" gelten.
>
>Vorteil:
>
>-  identisches und konsistentes Verhalten des Servers unter Unix und Windows
>
>Nachteil:
>
>-  Skripte und Programme, die zwingend ein Zeilenende der Form "\r\n" 
>   erwarten, müssen angepaßt werden. 
>
>   Solche Programme wären aber sowieso nicht portabel, denn sie würden 
>   schon mit der bisherigen Unix-Version (avanti-x) nicht funktionieren.
>
>   Die Webfrontends acphp und acwww sowie das z39.50-Modul müßten 
>   jedenfalls nicht angepaßt werden, eventuell aber manche 
>   selbstentwickelten Skripte.
>
>Ich bitte um Meinungen.
>
>Freundliche Grüße,
>	Martin Butkus
>
>
>  
>

-- 
Mit freundlichen Grüßen

Edmund Wollgarten
Bibliothek der RWTH Aachen
Templergraben 61
52062 Aachen
Tel. 0241/80-90185
Fax. 0241/80-92273
E-Mail wollgarten at bth.rwth-aachen.de







Mehr Informationen über die Mailingliste Allegro