On 05/30/2022 19:40, Helmut Schellong wrote:
> On 05/30/2022 17:47, Stefan Reuther wrote:
>> Am 30.05.2022 um 16:24 schrieb Helmut Schellong:
>>> Eine Funktion 'ErweiterungsCheck()' hat für eine DOS-Umgebung gearbeitet.
>>> Seit 1995 keine Probleme.
>>> Aber nun gab es ein indirektes Problem mit './dir.s/exedatei'.
>>
>> Das ist ausgerechnet in einer DOS-Umgebung sogar ein gültiger Dateiname.
>> Hätte bei gescheiten Tests eher auffallen müssen.
>
> Ja, die Funktion hatte Namen mit mehreren Punkten und Verzeichnisse
> mit Punkten falsch verarbeitet.
>
>>> Die Zeichen ab '.s' wurden als Erweiterung aufgefaßt, und
>>> dadurch wurde ein Puffer für die Erweiterung zu klein, was die
>>> Funktion 'CatSn(n, puffer, ...)' bemerkte und den Prozeß abbrach.
>>
>> Wie lange wird es brauchen, bis deine Funktionen lernen, was bei
>> /home/user/.emacs die "Erweiterung" ist?
>>
>>
>>
>
> Ich definiere '.xyz' _nicht_ als Erweiterung.
> Führende Punkte kennzeichnen unter Unix versteckte Namen.
>
> Die Funktion 'ErweiterungsCheck()' prüft, ob eine Endung eine
> definierte Abkürzung (ABBR) ist.
> Also wohl etwas anderes als gedacht.
>
>
=======================================================================
static int ErwCk(const byte *Fn)
{ // ./d.d.d/f.e
byte erw[8];
const byte *fn=Fn, *p=0, *pe;
int n=0;
while (*fn) ++fn;
pe= fn;
while (fn>Fn) if (*--fn==PNT) { Fn= fn+1; break; }
else if (!p && *fn=='.') p= fn;
if (p && p>Fn && (pe-Fn)>=3 && (pe-p)>=2) {
CatSn(sizeof(erw), erw, p, NULL);
# if defined(DOS) || defined(W32) || defined(W64)
ToUpp(erw);
# endif
if (((n=NameRN(erw))&0xff)==ABBR) n+=256; else n=0;
}
return n;
}
=======================================================================
Ich vermute, ich habe bei der Entwicklung dieser Funktion angenommen, es
würden _nur_ Filenamen (fn, Fn) übergeben.
Weil ich 'pn, Pn' für Pfadnamen verwende.
Daher ist es zu einer teils fehlerhaften Verarbeitung gekommen.
Eben weil auch Pfadnamen übergeben werden.
Ich verlange oben als Minimum 'f.e' als Namen mit Endung.