From 4e6157b74a8fb55eb4e6ab786858dfb055839f55 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Thu, 23 Sep 2004 02:37:42 -0400 Subject: [PATCH] added some error checking --- config.cc | 13 ++++++++++--- main.cc | 21 ++++++++++++++++----- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/config.cc b/config.cc index cea5ac86..d8304d95 100644 --- a/config.cc +++ b/config.cc @@ -3,6 +3,7 @@ #include "quotes.h" #include +#include namespace ledger { @@ -206,14 +207,16 @@ void parse_ledger_data(journal_t * journal, { int entry_count = 0; - if (! config.init_file.empty()) { + if (! config.init_file.empty() && + access(config.init_file.c_str(), R_OK) != -1) { if (parse_journal_file(config.init_file, journal)) throw error("Entries not allowed in initialization file"); journal->sources.pop_front(); // remove init file } if (cache_parser && config.use_cache && - ! config.cache_file.empty() && ! config.data_file.empty()) { + ! config.cache_file.empty() && + ! config.data_file.empty()) { config.cache_dirty = true; if (access(config.cache_file.c_str(), R_OK) != -1) { std::ifstream stream(config.cache_file.c_str()); @@ -355,7 +358,11 @@ OPT_BEGIN(init, "i:") { } OPT_END(init); OPT_BEGIN(file, "f:") { - config.data_file = optarg; + if (access(optarg, R_OK) != -1) + config.data_file = optarg; + else + throw error(std::string("The ledger file '") + optarg + + "' does not exist or is not readable"); } OPT_END(file); OPT_BEGIN(cache, ":") { diff --git a/main.cc b/main.cc index 10e57f2a..27ebc021 100644 --- a/main.cc +++ b/main.cc @@ -247,8 +247,13 @@ int parse_and_report(int argc, char * argv[], char * envp[]) TIMER_START(report_gen); std::ostream * out = &std::cout; - if (! config.output_file.empty()) - out = new std::ofstream(config.output_file.c_str()); + if (! config.output_file.empty()) { + if (access(config.output_file.c_str(), W_OK) == -1) + throw error(std::string("Cannot write output to file '" + + config.output_file + "'")); + else + out = new std::ofstream(config.output_file.c_str()); + } // Compile the format strings @@ -328,9 +333,15 @@ int parse_and_report(int argc, char * argv[], char * envp[]) TIMER_START(write_cache); - if (config.use_cache && config.cache_dirty && ! config.cache_file.empty()) { - std::ofstream stream(config.cache_file.c_str()); - write_binary_journal(stream, journal.get(), &journal->sources); + if (config.use_cache && config.cache_dirty && + ! config.cache_file.empty()) { + if (access(config.cache_file.c_str(), W_OK) == -1) { + std::cerr << "Warning: Cannot update cache file '" + << config.cache_file << "'" << std::endl; + } else { + std::ofstream stream(config.cache_file.c_str()); + write_binary_journal(stream, journal.get(), &journal->sources); + } } TIMER_STOP(write_cache);