--- freem/src/ssvn_job.c 2025/04/11 23:27:04 1.8 +++ freem/src/ssvn_job.c 2025/06/23 20:53:30 1.11 @@ -1,5 +1,5 @@ /* - * $Id: ssvn_job.c,v 1.8 2025/04/11 23:27:04 snw Exp $ + * $Id: ssvn_job.c,v 1.11 2025/06/23 20:53:30 snw Exp $ * ^$JOB ssvn * * @@ -24,6 +24,15 @@ * along with FreeM. If not, see . * * $Log: ssvn_job.c,v $ + * Revision 1.11 2025/06/23 20:53:30 snw + * Documentation updates + * + * Revision 1.10 2025/04/28 19:38:55 snw + * Add trace mode + * + * Revision 1.9 2025/04/13 04:22:43 snw + * Fix snprintf calls + * * Revision 1.8 2025/04/11 23:27:04 snw * Fix overflow bugs in ssvn_job.c * @@ -63,6 +72,7 @@ #include "freem.h" #include "mref.h" #include "jobtab.h" +#include "shmmgr.h" short cur_symtab = 0; @@ -142,7 +152,11 @@ void ssvn_job_update(void) ierr_sav = ierr; snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202PIPE_GLVN\201", pid); - snprintf (d_buf, 5, "%%\201"); + snprintf (d_buf, STRLEN - 1, "%%\201"); + symtab_shm (set_sym, k_buf, d_buf); + + snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202TRACE\201", pid); + snprintf (d_buf, STRLEN - 1, "%d\201", trace_mode); symtab_shm (set_sym, k_buf, d_buf); snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ZCOMMANDS\201", pid); @@ -279,7 +293,7 @@ void ssvn_job_update(void) snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202$IO\201", pid); symtab_shm (set_sym, k_buf, d_buf); - snprintf (d_buf, STRLEN -1, "%s\201", gvndefault); + snprintf (d_buf, STRLEN - 1, "%s\201", gvndefault); snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202GVNDEFAULT\201", pid); symtab_shm (set_sym, k_buf, d_buf); @@ -339,7 +353,7 @@ void ssvn_job_update(void) default: snprintf (d_buf, STRLEN - 1, "IEEE754\201"); - snprintf (fp_conversion, 9, "%%.%df\201", DBL_DIG); + snprintf (fp_conversion, sizeof (fp_conversion) - 1, "%%.%df\201", DBL_DIG); zprecise = DBL_DIG; break; @@ -385,7 +399,12 @@ void ssvn_job(short action, char *key, c mref_init (r, MREF_RT_SSVN, "^$JOB"); internal_to_mref (r, kbuf); - t_pid = atol (mref_get_subscript (r, 0)); + if (r->subscript_count > 0) { + t_pid = atol (mref_get_subscript (r, 0)); + } + else { + t_pid = shm_config->hdr->first_process; + } slot = job_get (t_pid); @@ -435,6 +454,10 @@ void ssvn_job(short action, char *key, c goto done; } + else if (strcmp (mref_get_subscript (r, 1), "TRACE") == 0) { + trace_mode = tvexpr (data); + goto done; + } else if (strcmp (mref_get_subscript (r, 1), "LVNQOVAL") == 0) { stcpy (l_o_val, data); @@ -904,7 +927,7 @@ void ssvn_job(short action, char *key, c fp_mode = 1; symtab_shm (set_sym, kbuf, data); - snprintf (fp_conversion, 9, "%%.%df\201", DBL_DIG); + snprintf (fp_conversion, sizeof (fp_conversion) - 1, "%%.%df\201", DBL_DIG); zprecise = DBL_DIG; merr_clear (); @@ -934,7 +957,7 @@ void ssvn_job(short action, char *key, c goto done; } - case get_sym: + case get_sym: if (strcmp (mref_get_subscript (r, 1), "LVNQOVAL") == 0) { stcpy (data, l_o_val); goto done; @@ -943,6 +966,10 @@ void ssvn_job(short action, char *key, c stcpy (data, g_o_val); goto done; } + else if (strcmp (mref_get_subscript (r, 1), "TRACE") == 0) { + snprintf (data, STRLEN - 1, "%d\201", trace_mode); + goto done; + } case fra_dat: case fra_order: case fra_query: