Diff for /freem/src/init.c between versions 1.10 and 1.15

version 1.10, 2025/04/10 01:24:38 version 1.15, 2025/05/16 04:02:14
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.15  2025/05/16 04:02:14  snw
    *   Make FreeM build on macOS on Apple Silicon
    *
    *   Revision 1.14  2025/04/20 03:13:17  snw
    *   Updates to init_execution_context
    *
    *   Revision 1.13  2025/04/17 14:34:27  snw
    *   Further logging improvements
    *
    *   Revision 1.12  2025/04/15 14:39:06  snw
    *   Further improvements to logging
    *
    *   Revision 1.11  2025/04/13 04:22:43  snw
    *   Fix snprintf calls
    *
  *   Revision 1.10  2025/04/10 01:24:38  snw   *   Revision 1.10  2025/04/10 01:24:38  snw
  *   Remove C++ style comments   *   Remove C++ style comments
  *   *
Line 73 Line 88
 # include <termios.h>  # include <termios.h>
 #endif  #endif
   
   #if defined(__APPLE__)
   # define termio termios
   # define TCGETA TIOCGETA
   # define TCSETA TIOCSETA
   #endif
   
 #include "config.h"  #include "config.h"
   
 #if defined(HAVE_MWAPI_MOTIF)  #if defined(HAVE_MWAPI_MOTIF)
Line 89 Line 110
 #include "jobtab.h"  #include "jobtab.h"
 #include "datatypes.h"  #include "datatypes.h"
 #include "objects.h"  #include "objects.h"
   #include "log.h"
   
 #ifdef HAVE_LIBREADLINE  #ifdef HAVE_LIBREADLINE
 #  if defined(HAVE_READLINE_READLINE_H)  #  if defined(HAVE_READLINE_READLINE_H)
Line 162  void init_mwapi(void); Line 184  void init_mwapi(void);
 short init (char *namespace_name)   short init (char *namespace_name) 
 {  {
     short retval;      short retval;
       int log_level;
           
       init_log ();
     init_process ();      init_process ();
     init_devtable ();      init_devtable ();
     init_signals ();      init_signals ();
Line 186  short init (char *namespace_name) Line 210  short init (char *namespace_name)
   
     if (retval == SHMS_GET_ERR) {      if (retval == SHMS_GET_ERR) {
         if (errno != 13) {          if (errno != 13) {
             fprintf (stderr, "init:  error initializing shared memory [errno %d]\r\n", errno);              logprintf (FM_LOG_FATAL, "init:  error initializing shared memory (error code %d [%s])", errno, strerror (errno));
         }          }
         else {          else {
             fprintf (stderr, "init:  error attaching to environment -- does your user belong to the group that owns environment '%s'?\r\n", shm_env);              logprintf (FM_LOG_FATAL, "init:  error attaching to environment -- does your user belong to the group that owns environment '%s'?", shm_env);
         }          }
         if (run_daemon == FALSE) {  
             set_io (UNIX);  
         }  
         exit (1);  
     }      }
   
     symtab_init ();      symtab_init ();
Line 203  short init (char *namespace_name) Line 223  short init (char *namespace_name)
     set_namespace (namespace_name, FALSE);      set_namespace (namespace_name, FALSE);
   
     if (first_process) {      if (first_process) {
         fprintf (stderr, "init:  we are the first process in the environment (pid %d)\r\n", pid);          log_level = FM_LOG_INFO;
       }
       else {
           log_level = FM_LOG_DEBUG;
       }
       
       if (first_process) {
           logprintf (log_level, "init:  we are the first process in the environment (pid %d)", pid);
     }      }
   
     if (first_process) fprintf (stderr, "init:  initializing job table\r\n");      logprintf (log_level, "init:  initializing job table");
     jobtab_init ();      jobtab_init ();
   
     if (first_process) fprintf (stderr, "init:  adding job to job table\r\n");      logprintf (log_level, "init:  adding job to job table");
     job_init (FALSE);      job_init (FALSE);
   
     if (first_process) fprintf (stderr, "init:  initializing structured system variables\r\n");      logprintf (log_level, "init:  initializing structured system variables");
     init_ssvn ();      init_ssvn ();
   
     if (first_process) fprintf (stderr, "init:  initializing terminal\r\n");      logprintf (log_level, "init:  initializing terminal");
     init_terminal ();      init_terminal ();
   
     if (first_process) fprintf (stderr, "init:  initializing asynchronous events\r\n");      logprintf (log_level, "init:  initializing asynchronous events");
     evt_init ();      evt_init ();
   
     if (first_process) fprintf (stderr, "init:  initializing debugger\r\n");      logprintf (log_level, "init:  initializing debugger");
     dbg_init ();          dbg_init ();    
   
     if (first_process) fprintf (stderr, "init:  initializing error stack\r\n");      logprintf (log_level, "init:  initializing error stack");
     init_estack();      init_estack();
           
     etrap[0] = EOL;      etrap[0] = EOL;
Line 244  void init_process (void) Line 271  void init_process (void)
 {  {
     pid = getpid ();            /* get $J = process ID */      pid = getpid ();            /* get $J = process ID */
     umask (0);              /* protection bits mask to full rights */      umask (0);              /* protection bits mask to full rights */
     snprintf (fp_conversion, 9, "%%.%df\201", DBL_DIG);      snprintf (fp_conversion, sizeof (fp_conversion) - 1, "%%.%df\201", DBL_DIG);
   
     if (fp_mode) {      if (fp_mode) {
         zprecise = DBL_DIG;          zprecise = DBL_DIG;
Line 383  void init_timezone (void) Line 410  void init_timezone (void)
   
     long clock;      long clock;
   
 #ifdef __CYGWIN__  #if defined(__CYGWIN__)
   
     tzset ();                        /* may be required in order   */      tzset ();                        /* may be required in order   */
                                      /* to guarantee _timezone set */                                       /* to guarantee _timezone set */
 #else  #else
Line 453  void init_readline (void) Line 479  void init_readline (void)
     pw_buf = (char *) calloc (strlen(pw->pw_dir) + 1, sizeof(char));      pw_buf = (char *) calloc (strlen(pw->pw_dir) + 1, sizeof(char));
     strcpy (pw_buf, pw->pw_dir);      strcpy (pw_buf, pw->pw_dir);
   
     snprintf (history_file, 256, "%s/.freem_history", pw_buf);      snprintf (history_file, sizeof (history_file) - 1, "%s/.freem_history", pw_buf);
   
     free (pw_buf);      free (pw_buf);
   
Line 472  void init_execution_context (void) Line 498  void init_execution_context (void)
           
     codptr = code;      codptr = code;
     code[0] = EOL;          /* init code_pointer */      code[0] = EOL;          /* init code_pointer */
     partition = calloc ((unsigned) (PSIZE + 2), 1);  
   
     if (partition == NULL) exit (2);            /* could not allocate stuff...     */      if ((partition = calloc ((unsigned) (PSIZE + 2), 1)) == NULL) {
           logprintf (FM_LOG_FATAL, "init_execution_context:  could not allocate symbol table (error code %d [%s])", errno, strerror (errno));
       }
   
     for (i = 0; i < MAXNO_OF_RBUF; i++) {      for (i = 0; i < MAXNO_OF_RBUF; i++) {
         rbuf_flags[i].standard = standard;          rbuf_flags[i].standard = standard;
Line 488  void init_execution_context (void) Line 515  void init_execution_context (void)
     s = &partition[PSIZE] - 256;    /* pointer to symlen_offset        */      s = &partition[PSIZE] - 256;    /* pointer to symlen_offset        */
     argptr = partition;         /* pointer to beg of tmp-storage   */      argptr = partition;         /* pointer to beg of tmp-storage   */
   
     svntable = calloc ((unsigned) (UDFSVSIZ + 1), 1);      if ((svntable = calloc ((unsigned) (UDFSVSIZ + 1), 1)) == NULL) {
     if (svntable == NULL) exit (2);         /* could not allocate stuff...     */          logprintf (FM_LOG_FATAL, "init_execution_context:  could not allocate user-defined ISV table (error code %d [%s])", errno, strerror (errno));
           }    
     svnlen = UDFSVSIZ;          /* begin of udf_svn_table         */      svnlen = UDFSVSIZ;          /* begin of udf_svn_table         */
     buff = calloc ((unsigned) NO_OF_RBUF * (unsigned) PSIZE0, 1);   /* routine buffer pool          */  
     if (buff == NULL) exit (2);         /* could not allocate stuff...     */  
   
       if ((buff = calloc ((unsigned) NO_OF_RBUF * (unsigned) PSIZE0, 1)) == NULL) {
           logprintf (FM_LOG_FATAL, "init_execution_context:  could not allocate routine buffers (error code %d [%s])", errno, strerror (errno));
       }
           
     newstack = calloc ((unsigned) NSIZE, 1);       if ((newstack = calloc ((unsigned) NSIZE, 1)) == NULL) {
     if (newstack == NULL) exit (2);         /* could not allocate stuff...     */          logprintf (FM_LOG_FATAL, "init_execution_context:  could not allocate NEW stack (error code %d [%s])", errno, strerror (errno));
       }
   
     #ifdef DEBUG_NEWPTR      logprintf (FM_LOG_DEBUG, "allocating newptr stack...");
         printf("Allocating newptr stack...\r\n");  
     #endif  
   
     newptr = newstack;      newptr = newstack;
     newlimit = newstack + NSIZE - 1024;      newlimit = newstack + NSIZE - 1024;
           
   
     namstck = calloc ((unsigned) NESTLEVLS * 13, 1);      if ((namstck = calloc ((unsigned) NESTLEVLS * 13, 1)) == NULL) {
     if (namstck == NULL) exit (2);          /* could not allocate stuff...     */          logprintf (FM_LOG_FATAL, "init_execution_context:  could not allocate newptr stack (error code %d [%s])", errno, strerror (errno));
       }
       
     *namstck = EOL;      *namstck = EOL;
     *(namstck + 1) = EOL;      *(namstck + 1) = EOL;
     namptr = namstck;           /* routine name stack pointer       */      namptr = namstck;           /* routine name stack pointer       */
     framstck = calloc ((unsigned) NESTLEVLS * 256, 1);      
     if (framstck == NULL) exit (2);         /* could not allocate stuff...     */      if ((framstck = calloc ((unsigned) NESTLEVLS * 256, 1)) == NULL) {
           logprintf (FM_LOG_FATAL, "init_execution_context:  could not allocate DO frame stack stack (error code %d [%s])", errno, strerror (errno));
       }
   
     *framstck = EOL;      *framstck = EOL;
     *(framstck + 1) = EOL;      *(framstck + 1) = EOL;
     dofrmptr = framstck;        /* DO_frame stack pointer           */      dofrmptr = framstck;        /* DO_frame stack pointer           */
     cmdstack = calloc ((unsigned) NESTLEVLS * 256, 1);  
     if (cmdstack == NULL) exit (2);         /* could not allocate stuff...     */      if ((cmdstack = calloc ((unsigned) NESTLEVLS * 256, 1)) == NULL) {
           logprintf (FM_LOG_FATAL, "init_execution_context:  could not allocate command stack (error code %d [%s])", errno, strerror (errno));
       }
   
     cmdptr = cmdstack;          /* command stack */      cmdptr = cmdstack;          /* command stack */
   
Line 661  void cleanup (void) Line 693  void cleanup (void)
     int ch;      int ch;
   
     /* remove this job's entry from ^$JOB SSVN */      /* remove this job's entry from ^$JOB SSVN */
     snprintf (k_buf, 255, "^$JOB\202%d\201", pid);      snprintf (k_buf, sizeof (k_buf) - 1, "^$JOB\202%d\201", pid);
     symtab_shm (kill_sym, k_buf, " \201");      symtab_shm (kill_sym, k_buf, " \201");
           
     reset_terminal ();      reset_terminal ();

Removed from v.1.10  
changed lines
  Added in v.1.15


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