Ignore:
Timestamp:
Oct 30, 2010, 4:41:51 AM (11 years ago)
Author:
Peter Johansson
Message:

fixes #477

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/0.8-stable/bin/Parameter.cc

    r1119 r1246  
    9797      check_existence(root_.value());
    9898      check_readable(root_.value());
     99
     100      // check that root is directory (or link pointing to directory)
     101      struct stat stats;
     102      stat(root_.value().c_str(), &stats);
     103      if (!S_ISDIR(stats.st_mode)) {
     104        std::stringstream ss;
     105        ss << cmd_.program_name() << ": '" << root_.value()
     106           << "': Not a directory";
     107        throw yat::utility::cmd_error(ss.str());
     108      }
    99109      chdir(root_.value());
    100       root_.value(pwd());
     110      root_full_ = pwd();
    101111      chdir(save_wd);
     112
     113      // take care of when root is a symlink (see ticket #477)
     114      lstat(root_.value().c_str(), &stats);
     115      if (S_ISLNK(stats.st_mode))
     116        root_basename_ = file_name(root_.value());
     117      else
     118        root_basename_ = file_name(root_full_);
    102119    }
    103120
     
    181198  std::string Parameter::root(void) const
    182199  {
    183     return root_.value();
    184   }
     200    return root_full_;
     201  }
     202
     203
     204  const std::string& Parameter::root_basename(void) const
     205  {
     206    assert(root_basename_.size());
     207    return root_basename_;
     208  }
     209
    185210
    186211  void Parameter::set_default(void)
Note: See TracChangeset for help on using the changeset viewer.