99#include  < cstring> 
1010#include  < fstream> 
1111#include  < iostream> 
12+ #include  < sys/stat.h> 
1213#include  < string> 
1314#include  < utility> 
1415#include  < vector> 
1516
17+ static  bool  isDir (const  std::string& path)
18+ {
19+     struct  stat  file_stat;
20+     if  (stat (path.c_str (), &file_stat) == -1 )
21+         return  false ;
22+ 
23+     return  (file_stat.st_mode  & S_IFMT) == S_IFDIR;
24+ }
25+ 
1626int  main (int  argc, char  **argv)
1727{
1828    bool  error = false ;
@@ -23,6 +33,7 @@ int main(int argc, char **argv)
2333
2434    //  Settings..
2535    simplecpp::DUI dui;
36+     dui.removeComments  = true ;
2637    bool  quiet = false ;
2738    bool  error_only = false ;
2839    for  (int  i = 1 ; i < argc; i++) {
@@ -144,29 +155,51 @@ int main(int argc, char **argv)
144155        return  0 ;
145156    }
146157
147-     dui.removeComments  = true ;
158+     //  TODO: move this logic into simplecpp
159+     bool  inp_missing = false ;
160+ 
161+     for  (const  std::string& inc : dui.includes ) {
162+         std::ifstream f (inc);
163+         if  (!f.is_open () || isDir (inc)) {
164+             inp_missing = true ;
165+             std::cout << " error: could not open include '" " '" 
166+         }
167+     }
168+ 
169+     for  (const  std::string& inc : dui.includePaths ) {
170+         if  (!isDir (inc)) {
171+             inp_missing = true ;
172+             std::cout << " error: could not find include path '" " '" 
173+         }
174+     }
175+ 
176+     std::ifstream f (filename);
177+     if  (!f.is_open () || isDir (filename)) {
178+         inp_missing = true ;
179+         std::cout << " error: could not open file '" " '" 
180+     }
181+ 
182+     if  (inp_missing)
183+         return  1 ;
148184
149185    //  Perform preprocessing
150186    simplecpp::OutputList outputList;
151187    std::vector<std::string> files;
152-     simplecpp::TokenList *rawtokens;
153-     if  (use_istream) {
154-         std::ifstream f (filename);
155-         if  (!f.is_open ()) {
156-             std::cout << " error: could not open file '" " '" 
157-             return  1 ;
188+     simplecpp::TokenList outputTokens (files);
189+     {
190+         simplecpp::TokenList *rawtokens;
191+         if  (use_istream) {
192+             rawtokens = new  simplecpp::TokenList (f, files,filename,&outputList);
193+         } else  {
194+             f.close ();
195+             rawtokens = new  simplecpp::TokenList (filename,files,&outputList);
158196        }
159-         rawtokens = new  simplecpp::TokenList (f, files,filename,&outputList);
160-     } else  {
161-         rawtokens = new  simplecpp::TokenList (filename,files,&outputList);
197+         rawtokens->removeComments ();
198+         simplecpp::FileDataCache filedata;
199+         simplecpp::preprocess (outputTokens, *rawtokens, files, filedata, dui, &outputList);
200+         simplecpp::cleanup (filedata);
201+         delete  rawtokens;
162202    }
163-     rawtokens->removeComments ();
164-     simplecpp::TokenList outputTokens (files);
165-     simplecpp::FileDataCache filedata;
166-     simplecpp::preprocess (outputTokens, *rawtokens, files, filedata, dui, &outputList);
167-     simplecpp::cleanup (filedata);
168-     delete  rawtokens;
169-     rawtokens = nullptr ;
170203
171204    //  Output
172205    if  (!quiet) {
0 commit comments