Diff for /freem/src/merr.c between versions 1.4 and 1.8

version 1.4, 2025/04/09 19:52:02 version 1.8, 2025/05/03 04:12:34
Line 24 Line 24
  *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.   *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.
  *   *
  *   $Log$   *   $Log$
    *   Revision 1.8  2025/05/03 04:12:34  snw
    *   Fix user-defined error codes
    *
    *   Revision 1.7  2025/05/01 03:56:29  snw
    *   -m
    *
    *   Revision 1.6  2025/04/30 17:19:16  snw
    *   Improve backtraces in debugger
    *
    *   Revision 1.5  2025/04/13 04:22:43  snw
    *   Fix snprintf calls
    *
  *   Revision 1.4  2025/04/09 19:52:02  snw   *   Revision 1.4  2025/04/09 19:52:02  snw
  *   Eliminate as many warnings as possible while building with -Wall   *   Eliminate as many warnings as possible while building with -Wall
  *   *
Line 206  err_lut errtab[] = { Line 218  err_lut errtab[] = {
   
 inline int merr_raise(int num)  inline int merr_raise(int num)
 {  {
       char placebuf[256];
       char lref[256];
       
       if (num != OK) {
           lasterr[nstx] = ierr;
       }
           
     if (merr_in_break ()) {      if (merr_in_break ()) {
         ierr = num - CTRLB;          ierr = num - CTRLB;
Line 217  inline int merr_raise(int num) Line 235  inline int merr_raise(int num)
     if (num != OK) {      if (num != OK) {
         merr_set_ecode_ierr ();          merr_set_ecode_ierr ();
                   
         stcpy (merr_stack[nstx].MCODE, code);  
         stcpy (merr_stack[nstx].ECODE, ecode);          stcpy (merr_stack[nstx].ECODE, ecode);
                   
         if (direct_mode == 1 && nstx == 0) {          if (direct_mode == 1 && nstx == 0) {
             stcpy (merr_stack[nstx].PLACE, "@\201\0");              stcpy (merr_stack[nstx].PLACE, "@\201\0");
               stcpy (merr_stack[nstx].MCODE, " \201\0");
         }          }
         else {          else {            
             if (!rtn_get_offset (merr_stack[nstx].PLACE)) {              getraddress (placebuf, nstx);
                 stcpy (merr_stack[nstx].PLACE, "???\201");              stcpy (merr_stack[nstx].PLACE, &(placebuf[3]));
               stcpy (lref, merr_stack[nstx].PLACE);
               stcnv_m2c (lref);
               if (routine_get_line (lref, merr_stack[nstx].MCODE) == NULL) {
                   sprintf (merr_stack[nstx].MCODE, "???\201");
               }
               else {
                   stcnv_c2m (merr_stack[nstx].MCODE);
             }              }
         }          }
                  
         if (nstx > merr_topstk) merr_topstk = nstx;          if (nstx > merr_topstk) merr_topstk = nstx;
     }      }   
           
     return ierr;          return ierr;    
 }  }
Line 304  void merr_set_ecode_ierr (void) Line 329  void merr_set_ecode_ierr (void)
     char *cod;      char *cod;
     char *t;      char *t;
           
     cod = (char *) malloc (256 * sizeof (char));      cod = (char *) malloc (MERR_COD_LENGTH * sizeof (char));
     NULLPTRCHK(cod,"merr_set_ecode_ierr");      NULLPTRCHK(cod,"merr_set_ecode_ierr");
           
     t = (char *) malloc (256 * sizeof (char));      t = (char *) malloc (MERR_COD_LENGTH * sizeof (char));
     NULLPTRCHK(t,"merr_set_ecode_ierr");      NULLPTRCHK(t,"merr_set_ecode_ierr");
           
     if ((merr_num_to_code (merr (), cod)) == -1) goto done;      if ((merr_num_to_code (merr (), cod)) == -1) goto done;
   
     snprintf (t, 255, ",%s,\201", cod);      snprintf (t, MERR_COD_LENGTH - 1, ",%s,\201", cod);
     merr_set_ecode (t);      merr_set_ecode (t);
           
     job_set_ecode (pid, cod);      job_set_ecode (pid, cod);
Line 399  void merr_dump (int num, char *rtn, char Line 424  void merr_dump (int num, char *rtn, char
                 stcnv_m2c (real_ecode);                  stcnv_m2c (real_ecode);
                 real_ecode [strlen (real_ecode) - 1] = NUL;                  real_ecode [strlen (real_ecode) - 1] = NUL;
   
                 snprintf (tbuf, STRLEN, "^$JOB\202%d\202USER_ERRORS\202%s\201", pid, &user_ecode[1]);                  snprintf (tbuf, STRLEN - 1, "^$JOB\202%d\202USER_ERRORS\202%s\201", pid, &user_ecode[1]);
                 tbuf [stlen (tbuf) - 1] = '\201';                  tbuf [stlen (tbuf) - 1] = '\201';
   
                 global (get_sym, tbuf, dbuf);                  ssvn (get_sym, tbuf, dbuf);
                                   
                 if (merr () == OK) {                  if (merr () == OK) {
                     stcpy (nem, dbuf);                      stcpy (nem, dbuf);
Line 420  void merr_dump (int num, char *rtn, char Line 445  void merr_dump (int num, char *rtn, char
   
                           
             if (!stlen (err_suppl)) {              if (!stlen (err_suppl)) {
                 snprintf (tbuf, STRLEN, "\r\n>> Error %s:  %s in %s.%s::%s  [$STACK = %d]\r\n\201", real_ecode, nem, shm_env, nsn, nrt, nstx);                  snprintf (tbuf, STRLEN - 1, "\r\n>> Error %s:  %s in %s.%s::%s  [$STACK = %d]\r\n\201", real_ecode, nem, shm_env, nsn, nrt, nstx);
             }              }
             else {              else {
                 stcnv_m2c (err_suppl);                  stcnv_m2c (err_suppl);
                 snprintf (tbuf, STRLEN, "\r\n>> Error %s:  %s (%s) in %s::%s  [$STACK = %d]\r\n\201", real_ecode, nem, err_suppl, nsn, nrt, nstx);                  snprintf (tbuf, STRLEN - 1, "\r\n>> Error %s:  %s (%s) in %s::%s  [$STACK = %d]\r\n\201", real_ecode, nem, err_suppl, nsn, nrt, nstx);
                 err_suppl[0] = EOL;                  err_suppl[0] = EOL;
             }              }
             write_m (tbuf);              write_m (tbuf);

Removed from v.1.4  
changed lines
  Added in v.1.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>