Ignore:
Timestamp:
Apr 28, 2018, 4:35:04 PM (13 months ago)
Author:
cameron
Message:

Handling of file system errors

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/util/file_select.cpp

    r5997 r5999  
    3030static cl::OptionCategory Input_Options("File Selection Options", "These options control the input sources.");
    3131
     32bool NoMessagesFlag;
     33static cl::opt<bool, true> NoMessagesOption("s", cl::location(NoMessagesFlag), cl::desc("Suppress messages for file errors."), cl::cat(Input_Options), cl::Grouping);
     34static cl::alias NoMessagesAlias("no-messages", cl::desc("Alias for -s"), cl::aliasopt(NoMessagesOption));
     35
    3236bool RecursiveFlag;
    3337static cl::opt<bool, true> RecursiveOption("r", cl::location(RecursiveFlag), cl::desc("Recursively process files within directories, (but follow only top-level symlinks unless -R)."), cl::cat(Input_Options), cl::Grouping);
     
    192196    }
    193197}
     198
     199
     200
    194201   
    195202std::vector<fs::path> getFullFileList(cl::list<std::string> & inputFiles) {
     
    212219            }
    213220            fs::path p(f);
     221            errs() << "path: " << p.string() << "\n";
     222            fs::file_status s = fs::status(p, errc);
    214223            if (errc) {
    215224                // If there was an error, we leave the file in the fileCandidates
    216225                // list for later error processing.
    217                 collectedPaths.push_back(p);
    218             } else if (fs::is_directory(p)) {
     226                if (!NoMessagesFlag) collectedPaths.push_back(p);
     227            } else if (fs::is_directory(s)) {
    219228                if (DirectoriesFlag == Read) {
    220229                    collectedPaths.push_back(p);
    221230                }
    222             } else if (fs::is_regular_file(p)) {
     231            } else if (fs::is_regular_file(s)) {
    223232                collectedPaths.push_back(p);
    224233            } else {
     
    250259        }
    251260        fs::path p(f);
     261        fs::file_status s = fs::status(p, errc);
    252262        if (errc) {
    253263            // If there was an error, we leave the file in the fileCandidates
    254264            // list for later error processing.
    255             fileCandidates.addSearchCandidate(p.c_str());
    256         } else if (fs::is_directory(p)) {
     265            if (!NoMessagesFlag) fileCandidates.addSearchCandidate(p.c_str());
     266        } else if (fs::is_directory(s)) {
    257267            if (DirectoriesFlag == Recurse) {
    258268                dirCandidates.addSearchCandidate(p.c_str());
     
    260270                fileCandidates.addSearchCandidate(p.c_str());
    261271            }
    262         } else if (fs::is_regular_file(p)) {
     272        } else if (fs::is_regular_file(s)) {
    263273            fileCandidates.addSearchCandidate(p.c_str());
    264274        } else {
     
    309319                    // If we cannot enter the directory, keep it in the list of files,
    310320                    // for possible error reporting.
    311                     fileCandidates.addSearchCandidate(dirpath.filename().c_str());
     321                    if (!NoMessagesFlag) fileCandidates.addSearchCandidate(dirpath.filename().c_str());
    312322                    continue;
    313323                }
    314324                while (di != di_end) {
    315325                    auto & e = di->path();
    316                     if (fs::is_directory(e)) {
    317                         if (fs::is_symlink(e) && !DereferenceRecursiveFlag) {
     326                    fs::file_status s = fs::status(e, errc);
     327                    if (errc) {
     328                        // If there was an error, we leave the file in the fileCandidates
     329                        // list for later error processing.
     330                        if (!NoMessagesFlag) fileCandidates.addSearchCandidate(e.filename().c_str());
     331                    } else if (fs::is_directory(s)) {
     332                        if (fs::is_symlink(s) && !DereferenceRecursiveFlag) {
    318333                            di.increment(errc);
    319334                            continue;
    320335                        }
    321336                        subdirCandidates.addSearchCandidate(e.filename().c_str());
    322                     } else if (fs::is_regular_file(e)) {
     337                    } else if (fs::is_regular_file(s)) {
    323338                        fileCandidates.addSearchCandidate(e.filename().c_str());
    324339                    } else {
Note: See TracChangeset for help on using the changeset viewer.