人間とウェブの未来

「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。

ファイルパスの/で結構ハマってしまったメモ

Linuxでとあるコードを書いていたのですが、例えば、

mkdir hoge
ln -s hoge hoge_link

のようにして、対象パスがsymlinkだったらリンク先を辿らないlstat()システムコールで、

static bool
check_symlink (char *source)
{
  struct stat sb;

  if (lstat(source, &sb) != 0)
    error(EXIT_FAILURE, errno, _("failed to access"));

  if ((sb.st_mode & S_IFMT) == S_IFLNK) {
    return true;
  }

  /* not symlink */
  return false;
}

のようなコードを書くとします。

それで、check_symlink("hoge_link")とかすると当然trueが返ってきます。

一方で、check_symlink("hoge_link/")とかすると、falseが返ってくるのですねぇ。

こうやって書いてみると当たり前なのですが、これで少しハマってしまいました。