•  Back 
  •  Der Aufbau eines XFS 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File11.21.2.25  xfs_path2DD                                            TOS

 Name:         »xfs_path2DD« - gibt einen DD zum Pfadnamen zurück.

 Parameter:

                mode =   0: name ist Datei
                =        1: name ist selbst Verzeichnis
                d0 =     int mode
                a0 =     DD *reldir akt. Verzeichnis
                a1 =     char *pathname
                -> d0 =  DD *
                d1 =     char *restpfad
                oder
                -> d0 =  ELINK
                d1 =     Restpfad ohne beginnenden '\'
                a0 =     FD des Pfades, in dem der symbolische Link 
                         liegt. Dies ist wichtig bei relativen 
                         Pfadangaben im Link.
                a1 =     NULL, Der Pfad stellt den Parent des 
                         Wurzelverzeichnisses dar.
                oder
                a1 =     Pfad des symbolischen Links

 Beschreibung: Der Kernel unterscheidet zwischen zwei Typen von 
               Deskriptoren, Dateideskriptoren FD, file descriptor) 
               und Verzeichnisdeskriptoren (DD, directory descriptor), 
               die aber im Aufbau identisch sein können. Diese 
               Funktion liefert zu einem Pfad einen Deskriptor zurück. 
               Der Referenzzähler des DD muß jedesmal, wenn er als 
               Funktionswert zurückgeliefert wird, um 1 erhöht werden, 
               weil er vom Kernel referenziert wird. Die Funktion 
               path2DD entspricht einem "Öffnen" des Pfades, es wird 
               eine Art "Dateihandle" dem Kernel zurückgegeben, das 
               der Kernel wieder schließen muß. Das Parsen des Pfades 
               muß immer vom XFS erledigt werden.

               Eingabeparameter:

                <mode>      Legt fest, ob das letzte Pfadelement 
                            selbst ein Verzeichnis ist (mode == 1), 
                            oder ob der Pfad ermittelt werden soll, in 
                            dem diese Datei liegt.
                <reldir>    Verzeichnis, von dem aus gesucht werden 
                            soll.
                <pathname>  Der Pfadname, ohne Laufwerkbuchstaben und 
                            ohne führendes '\'.

               Ausgabeparameter:

               1. Fall: Es ist ein Fehler aufgetreten

               <d0> enthält den Fehlercode

               2. Fall: Ein Verzeichnisdeskriptor (DD) konnte 
               ermittelt werden.

                <d0> Zeiger auf den DD. Der Referenzzähler des DD 
                     wurde vom XFS um 1 erhöht.
                <d1> Zeiger auf den restlichen Dateinamen ohne 
                     beginnenden '\' bzw. '/'. Wenn das Ende des 
                     Pfades erreicht wurde, zeigt dieser Zeiger auf 
                     das abschliessende Nullbyte.

               3. Fall: Das XFS ist bei der Pfadauswertung auf einen 
               symbolischen Link gestoßen

                <d0>  enthält den internen MagiC Fehlercode ELINK
                <d1>  Zeiger auf den restlichen Pfad ohne beginnenden 
                      '\' bzw. '/'
                <a0>  enthält den DD des Pfades, in dem der 
                      symbolische Link liegt. Der Referenzzähler des 
                      DD wurde vom XFS um 1 erhöht.
                <a1>  ist der Zeiger auf den Link selbst. Ein Link 
                      beginnt mit einem Wort (16 Bit) für die Länge 
                      des Pfads, gefolgt vom Pfad selbst.

               Achtung: Die Länge muß INKLUSIVE abschließendes 
               Nullbyte und außerdem gerade sein. Der Link muß auf 
               einer geraden Speicheradresse liegen.

               Der Puffer für den Link kann statisch oder auch 
               flüchtig sein, da der Kernel die Daten sofort 
               umkopiert, ohne daß zwischendurch ein Kontextwechsel 
               stattfinden kann.

               Wird a1 == NULL übergeben, wird dem Kernel 
               signalisiert, daß der Parent des Wurzelverzeichnisses 
               angewählt wurde. Befindet sich der Pfad etwa auf U:\A, 
               kann der Kernel auf U:\ zurückgehen. Der Wert des 
               Rückgaberegisters a0 wird vom Kernel ignoriert, es darf 
               daher kein Referenzzähler erhöht werden.

 Gruppe:       Aufbau eines XFS

 Querverweis:  XFS-Konzept in MagiC