Get error_at_step initialized when errors
authorFrançois Pinard <pinard@iro.umontreal.ca>
Tue, 19 Feb 2008 00:52:21 +0000 (19:52 -0500)
committerFrançois Pinard <pinard@iro.umontreal.ca>
Tue, 19 Feb 2008 04:21:38 +0000 (23:21 -0500)
src/ChangeLog
src/task.c

index 4f237f9bd3a8243195c1a20717530f17aaa7d2bd..183061773ef4821fa95d072b6aedc8885046f204 100644 (file)
        * Makefile.am: Replace lib_LTLIBRARIES by noinst_LIBRARIES.
        Replace librecode.la by libcode.a and librecode_la by librecode_a.
 
+2001-07-01  Bruno Haible  <haible@clisp.cons.org>
+
+       * task.c (perform_pass_sequence): Call recode_if_nogo before
+       returning false.  Otherwise task->error_at_step is not set, and
+       main() dumps core.
+       Reported by David Necas, Konstantin Osipov and Stephen Grecni.
+
 2001-01-22  Bruno Haible  <haible@clisp.cons.org>
 
        * hash.c: Avoid use of undefined macros HAVE_DECL_MALLOC/FREE.
index 7ccee89f539c96ce23675028eff04810fbcd18ff..d23d4fb947d85c438ad24a40f69138183d7a924f 100644 (file)
@@ -485,6 +485,9 @@ perform_pass_sequence (RECODE_TASK task)
         && task->error_so_far < task->abort_level;
        sequence_index++)
     {
+      step = request->sequence_array + sequence_index;
+      subtask->step = step;
+
       /* Select the input text for this step.  */
 
       if (sequence_index == 0)
@@ -499,6 +502,7 @@ perform_pass_sequence (RECODE_TASK task)
                       subtask->input.file == NULL)
                {
                  recode_perror (NULL, "fopen (%s)", subtask->input.name);
+                 recode_if_nogo (RECODE_SYSTEM_ERROR, subtask);
                  return false;
                }
            }
@@ -510,6 +514,7 @@ perform_pass_sequence (RECODE_TASK task)
              subtask->input.file == NULL)
            {
              recode_perror (outer, "fopen (%s)", input.name);
+             recode_if_nogo (RECODE_SYSTEM_ERROR, subtask);
              return false;
            }
 #endif
@@ -535,6 +540,7 @@ perform_pass_sequence (RECODE_TASK task)
              subtask->output.file == NULL)
            {
              recode_perror (outer, "fopen (%s)", subtask->output.name);
+             recode_if_nogo (RECODE_SYSTEM_ERROR, subtask);
              return false;
            }
 #endif
@@ -543,6 +549,7 @@ perform_pass_sequence (RECODE_TASK task)
          if (subtask->output.file = tmpfile (), subtask->output.file == NULL)
            {
              recode_perror (NULL, "tmpfile ()");
+             recode_if_nogo (RECODE_SYSTEM_ERROR, subtask);
              return false;
            }
 #endif
@@ -560,6 +567,7 @@ perform_pass_sequence (RECODE_TASK task)
                       subtask->output.file == NULL)
                {
                  recode_perror (NULL, "fopen (%s)", subtask->output.name);
+                 recode_if_nogo (RECODE_SYSTEM_ERROR, subtask);
                  return false;
                }
            }
@@ -567,8 +575,6 @@ perform_pass_sequence (RECODE_TASK task)
 
       /* Execute one recoding step.  */
 
-      step = request->sequence_array + sequence_index;
-      subtask->step = step;
       (*step->transform_routine) (subtask);
 
       /* Post-step clean up.  */