[Allegro] Etwas für C-Programmierer: strcpy() vs. memmove()

Thomas Berger ThB at Gymel.com
Mo Dez 2 15:15:47 CET 2013


Hallo Herr Fischer,

>> Evtl. erinnern Sie sich falsch, acon hatte auf allen Plattformen Probleme
>> mit Suchbegriffen, die ein "#" enthielten. Nach meiner Erinnerung aber
>> nur unter Linux gab es das Problem, dass Suchbegriffe verstuemmelt
>> wurden.
> 
> Die fehlerhaften Ergebnisse hatte mit dem "#" am Ende von Suchbegriffen
> zu tun, bemerkt haben wird das bei acon.exe auf unserem Windows-Server.
> Soweit ich Herrn Berger verstanden habe, ging (unter bestimmten
> Umständen?) das "#" am Ende eines von mehreren Suchbegriffen verloren.

Wenn irgendwo im Suchbegriff "#" vorkam, wurde nicht gesucht, sondern
Satz 1 geladen. Bemerkt wurde das, weil wegen eines davon unabhaengigen
Bugs diese "Suche" nach Satz 1 einen Fehlerzustand zurueckgab. Drittens
hat das Linux-acon (vermutlich nur auf 64bit-Systemen mit neueren glibc's)
Suchbegriffe zermatscht, indem typischerweise gegen Ende hin ein Zeichen
verschluckt wurde, dafuer die abschliessenden Anfuehrungszeichen verdoppelt
wurden: Das brachte dann einen Syntaxfehler in den weiteren Suchverlauf
ein.

Betroffen von diesen Fehlern waren Versionen von etwa Mitte 2012 an
bis letzte Woche, die strcpy()-Angelegenheit aber z.B. war an der
neuralgischen Stelle etwa 1997 in den Code des Ur-Avanti hineingeraten,
das Auftreten von Fehlern duerfte dabei stets von der Kombination
Compiler (insbesondere eingestellte Optimierungen?) und Runtime-Umgebung
abgehangen haben, aber auch von konkreten Suchanfragen und internen
acon-Vorgaengen (die fragliche Stelle betraf das Aufessen von ueberfluessigen
Blanks im Zuge des Parsens der Anfrage, wobei hier traditionell "intern"
vorher noch an der Anfrage herummanipuliert wird, um etwa Klammern
zu isolieren).

viele Gruesse
Thomas Berger





Mehr Informationen über die Mailingliste Allegro