--- freem/src/symtab_bltin.c 2025/03/24 02:01:41 1.5
+++ freem/src/symtab_bltin.c 2025/04/19 21:52:20 1.13
@@ -1,5 +1,5 @@
/*
- * $Id: symtab_bltin.c,v 1.5 2025/03/24 02:01:41 snw Exp $
+ * $Id: symtab_bltin.c,v 1.13 2025/04/19 21:52:20 snw Exp $
* FreeM local system table and user-defined special variable table
*
*
@@ -24,6 +24,30 @@
* along with FreeM. If not, see .
*
* $Log: symtab_bltin.c,v $
+ * Revision 1.13 2025/04/19 21:52:20 snw
+ * Remove extraneous symbol table debugging message
+ *
+ * Revision 1.12 2025/04/14 19:56:27 snw
+ * Working towards FreeBSD fix
+ *
+ * Revision 1.11 2025/04/13 04:22:43 snw
+ * Fix snprintf calls
+ *
+ * Revision 1.10 2025/04/10 01:24:39 snw
+ * Remove C++ style comments
+ *
+ * Revision 1.9 2025/04/09 19:52:02 snw
+ * Eliminate as many warnings as possible while building with -Wall
+ *
+ * Revision 1.8 2025/04/04 12:46:13 snw
+ * Patch Solaris 8 crash and bump version to 0.63.1-rc1
+ *
+ * Revision 1.7 2025/03/26 15:17:12 snw
+ * Fall back to global-backed SSVNs when memory-backed globals fail in attempt to fix Tru64
+ *
+ * Revision 1.6 2025/03/24 04:13:11 snw
+ * Replace action macro dat with fra_dat to avoid symbol conflict on OS/2
+ *
* Revision 1.5 2025/03/24 02:01:41 snw
* Work around some OS/2 incompatibilities in symbol table code
*
@@ -52,6 +76,7 @@
symbol-table calls */
/* #define DEBUG_SYM */
+short st_use_shm = FALSE;
short restoring_consts = FALSE;
int semid_symtab;
@@ -111,6 +136,7 @@ void symtab_init (void)
shm_config->hdr->PSIZE = DEFPSIZE;
shm_config->hdr->argptr = mbpartition;
+
fprintf (stderr, "symtab_init: initializing memory-backed globals\r\n");
semid_symtab = semget (symtab_sk, 1, 0666 | IPC_CREAT);
@@ -122,6 +148,13 @@ void symtab_init (void)
fprintf (stderr, "symtab_init: symbol table semaphore created with semid %d\r\n", semid_symtab);
}
+#if defined(__sun__)
+ fprintf (stderr, "symtab_init: falling back to global-backed structured system variables\r\n");
+ shm_config->hdr->use_mb_globals = FALSE;
+ return;
+#endif
+
+
arg.val = 1;
if (semctl (semid_symtab, 0, SETVAL, arg) == -1) {
fprintf (stderr, "symtab_init: failed to initialize symbol table semaphore\r\n");
@@ -134,9 +167,14 @@ void symtab_init (void)
fprintf (stderr, "symtab_init: allocating partition for memory-backed globals\r\n");
mbpartition = (char *) shm_alloc ((size_t) PSIZE + 2);
- NULLPTRCHK(mbpartition,"symtab_init");
-
- shm_config->hdr->partition = mbpartition;
+ if (mbpartition != NULL) {
+ shm_config->hdr->use_mb_globals = TRUE;
+ shm_config->hdr->partition = mbpartition;
+ }
+ else {
+ fprintf (stderr, "symtab_init: falling back to global-backed structured system variables\r\n");
+ shm_config->hdr->use_mb_globals = FALSE;
+ }
if (symtab_get_sem ()) {
for (i = 0; i < 128; i++) shm_config->hdr->alphptr[i] = 0L;
@@ -151,9 +189,12 @@ void symtab_init (void)
fprintf (stderr, "symtab_init: could not attach to symbol table semaphore\r\n");
exit (1);
}
-
- mbpartition = shm_config->hdr->partition;
+ if (shm_config->hdr->use_mb_globals == TRUE) {
+ mbpartition = shm_config->hdr->partition;
+ }
+
+ symtab_release_sem ();
}
}
@@ -204,6 +245,11 @@ void symtab_shm (short action, char *key
unsigned long stptrs[128];
register int i;
char *old_partition = partition;
+
+ if (shm_config->hdr->use_mb_globals == FALSE) {
+ symtab_bltin (action, key, data);
+ return;
+ }
partition = mbpartition;
writing_mb = TRUE;
@@ -355,7 +401,7 @@ void symtab_bltin (short action, char *k
stcnv_m2c (tt_with);
stcnv_m2c (tt_key);
- snprintf (key, 100, "%s%s\201\201", tt_with, tt_key);
+ sprintf (key, "%s%s\201\201", tt_with, tt_key);
no_with:
@@ -561,7 +607,7 @@ no_with:
/* OLD get_sym routine */
if ((i = alphptr[(int) key[0]])) {
-// printf ("alphptr match; writing_mb = %d\r\n", writing_mb);
+/* printf ("alphptr match; writing_mb = %d\r\n", writing_mb); */
k = 1;
j = i + 1; /* first char always matches! */
@@ -610,10 +656,6 @@ no_with:
return;
-
-
-
-
case set_sym: /* store/create variable */
@@ -946,7 +988,7 @@ old0: /* entry from getinc */
/* end of set_sym section */
- case dat:
+ case fra_dat:
/* note: we assume EOL