Solaris 動的トレースガイド

cleanpath()

string cleanpath(char *str)

cleanpath() は、str で指定されたパスのコピーから成る文字列を生成します。ただし、特定の重複要素は排除されます。特に、パス内の「/./」要素は削除され、「/../」要素は縮められます。パス内の「/../」は、シンボリックリンクを考慮せずに縮められます。このため、cleanpath() を使用すると、有効なパスが縮められ、短い無効なパスが返されることがあります。

たとえば、str が「/foo/../bar」で、/foo/net/foo/export のシンボリックリンクになっている場合、bar があるのは / ではなく /net/foo であるのに、cleanpath() は文字列「/bar」を返します。この問題が発生するのは、cleanpath() が起動プローブのコンテキストで呼び出されるからです。起動プローブのコンテキストでは、完全なシンボリックリンク解決は行われず、任意の名前は使用できません。返される文字列には、スクラッチメモリーからメモリーが割り当てられます。したがって、節が完了すると、この文字列は無効になります。使用できるスクラッチ空間が不足している場合、cleanpath は実行されず、エラーが生成されます。