From 05731930232ffda2f5105dda689627b1f7e7d50d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Thu, 5 Jan 2023 16:40:16 +0100
Subject: [PATCH] Add two missing checks for file opening failures

(manually cherry picked from commit cf493ef6a6639e5d777522c960495961197eafeb)
---
 src/DynamicModel.cc | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index dd8f62ce..8418e8f2 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -2370,7 +2370,13 @@ DynamicModel::writeDynamicJacobianNonZeroElts(const string &basename) const
   sort(nzij_current.begin(), nzij_current.end());
   sort(nzij_fwrd.begin(), nzij_fwrd.end());
 
+  const string filename {"+" + basename + "/dynamic_g1_nz.m"};
   ofstream output{"+" + basename + "/dynamic_g1_nz.m", ios::out | ios::binary};
+  if (!output.is_open())
+    {
+      cerr << "ERROR: Can't open file " << filename << " for writing" << endl;
+      exit(EXIT_FAILURE);
+    }
   output << "function [nzij_pred, nzij_current, nzij_fwrd] = dynamic_g1_nz()" << endl
          << "% Returns the coordinates of non-zero elements in the Jacobian, in column-major order, for each lead/lag (only for endogenous)" << endl;
   auto print_nzij = [&output](const vector<pair<int, int>> &nzij, const string &name) {
@@ -2694,6 +2700,11 @@ DynamicModel::writeBlockDriverOutput(ostream &output, const string &basename,
       string main_name = basename + "/model/bytecode/kfi";
       ofstream KF_index_file;
       KF_index_file.open(main_name, ios::out | ios::binary | ios::ate);
+      if (!KF_index_file.is_open())
+        {
+          cerr << "ERROR: Can't open file " << main_name << " for writing" << endl;
+          exit(EXIT_FAILURE);
+        }
       int n_obs = symbol_table.observedVariablesNbr();
       int n_state = state_var.size();
       for (int it : state_var)
-- 
GitLab