Changeset 151 for trunk/bin


Ignore:
Timestamp:
Aug 13, 2006, 10:30:02 PM (15 years ago)
Author:
Jari Häkkinen
Message:

Fixes #50 and #58. Added checks that dirs exists and have proper permissions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/bin/Parameter.cc

    r149 r151  
    8484  void Parameter::analyse(void)
    8585  {
    86     // making root absolute
    87     std::string workdir(pwd());
    88     chdir(root_.c_str());
     86    using namespace std;
     87
     88    string workdir(pwd()); // remember current working directory (cwd).
     89
     90    // Checking that root_ exists and retrieve the absolute path to root_
     91    if (chdir(root_.c_str()))
     92      throw runtime_error(string("svndigest: Root directory (") + root_ +
     93                          ") access failed.");
    8994    root_ = pwd();
    90     // remove trailing '/'
    91     if (*root_.rbegin()=='/')
    92       root_.erase(root_.begin()+root_.size()-1);
    93     chdir(workdir.c_str());
    9495
    95     // making targetdir absolute
    96     chdir(targetdir_.c_str());
     96    // need to get back to cwd if relative paths are used.
     97    if (chdir(workdir.c_str()))
     98      runtime_error(string("svndigest: Failed to access cwd: ") + workdir);
     99
     100    // Checking that targetdir_ exists and retrieve the absolute path
     101    // to targetdir_
     102    if (chdir(targetdir_.c_str()))
     103      throw runtime_error(string("svndigest: Target directory (") + targetdir_ +
     104                          ") access failed.");
    97105    targetdir_ = pwd();
    98     // remove trailing '/'
    99     if (*targetdir_.rbegin()=='/')
    100       root_.erase(targetdir_.begin()+targetdir_.size()-1);
    101     chdir(workdir.c_str());
     106    // Checking write permissions for targetdir_
     107    if (access_rights(targetdir_,"w"))
     108      throw runtime_error(string("svndigest: No write permission on target ") +
     109                                 "directory (" + targetdir_ +").");
    102110
    103     struct stat buf;
    104     // check that root directory exists
    105     if (stat(root_.c_str(),&buf))
    106       throw std::runtime_error("\nsvndigest: " + root_ + ": No such directory.");
    107 
    108     // check that target directory exists
    109     if (stat(targetdir_.c_str(),&buf)){
    110       throw std::runtime_error("\nsvndigest: " + targetdir_ +
    111                                ": No such directory.");
    112     }
    113 
     111    // return back to cwd
     112    if (chdir(workdir.c_str()))
     113      runtime_error(string("svndigest: Failed to access cwd: ") + workdir);
    114114  }
    115115
Note: See TracChangeset for help on using the changeset viewer.