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