|
|
| version 1.12, 2025/04/15 14:39:06 | version 1.16, 2026/01/07 19:51:33 |
|---|---|
| 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.16 2026/01/07 19:51:33 snw | |
| * Fix segfault in reverse $QUERY | |
| * | |
| * 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 | * Revision 1.12 2025/04/15 14:39:06 snw |
| * Further improvements to logging | * Further improvements to logging |
| * | * |
| Line 71 | Line 83 |
| # endif | # endif |
| # define termio termios | # define termio termios |
| # else | # else |
| # if !defined(MSDOS) | # if !defined(MSDOS) && !defined(__linux__) |
| # include <termio.h> | # include <termio.h> |
| # else | |
| # include <termios.h> | |
| # define termio termios | |
| # endif | # endif |
| # endif | # endif |
| #else | #else |
| # 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 169 void init_mwapi(void); | Line 191 void init_mwapi(void); |
| short init (char *namespace_name) | short init (char *namespace_name) |
| { | { |
| short retval; | short retval; |
| int log_level; | |
| init_log (); | init_log (); |
| init_process (); | init_process (); |
| init_devtable (); | init_devtable (); |
| Line 194 short init (char *namespace_name) | Line 217 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 211 short init (char *namespace_name) | Line 230 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 391 void init_timezone (void) | Line 417 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 480 void init_execution_context (void) | Line 505 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 496 void init_execution_context (void) | Line 522 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 */ |