next up previous contents
Next: Uzupełnienia, uwagi, wnioski Up: fs/namei.c Previous: fs/namei.c   Spis rzeczy

Funkcja path_walk

Nagłówek: int path_walk(const char * name, struct nameidata *nd)
Funkcja jest wywoływana przez lookup_dentry(), jest główną funkcją szukającą numeru i-węzła, która idąc po kolejnych i-węzłach znajduje ten odpowiadający szukanemu plikowi, wynik zapisując w obiekcie struktury nameidata. Dzieje się to w sposób następujący:
  1. jeśli nazwa zaczyna się od / to ustawia bieżący i-węzeł na korzeń systemu plików, wpp na i-węzeł bieżącego katalogu
  2. dopóki nie został odcięty ostatni kawałek ścieżki powtarzaj:
  3. jeśli bieżący i-węzeł nie jest katalogiem lub nie mamy do niego odpowiednich praw to błąd
  4. odcinamy kolejny człon ścieżki (do znaku /) i szukamy odpowiedniego i-węzła w bieżącym katalogu, jeśli takowy nie istnieje to błąd; jeśli istnieje to zmieniamy bieżący i-węzeł na ten znaleziony
  5. jeśli bieżący i-węzeł jest punktem w którym został zamontowany jakiś sytem plików to zmieniamy bieżący i-węzeł na i-węzeł korzenia zamontowanego systemu plików
  6. jeśli bieżący i-węzeł jest dowiązaniem symbolicznym to decyzja o przejściu przez ten link jest podejmowana przez poniższy algorytm:
    - jeśli jest on w środku ścieżki to zawsze przechodzimy
    - jeśli jest ostatnim komponentem przy usuwaniu, zmienianiu nazwy itp. to nigdy nie przechodzimy
    - jeśli flaga LOOKUP_FOLLOW przekazywana do funkcji w strukturze nameidata jest ustawiona to przechodzimy
    - jeśli na końcu ścieżki są ukośniki to przechodzimy
    - wpp nie przechodzimy


next up previous contents
Next: Uzupełnienia, uwagi, wnioski Up: fs/namei.c Previous: fs/namei.c   Spis rzeczy
2001-12-19