--- freem/src/global_bltin.c 2025/04/11 16:52:05 1.19 +++ freem/src/global_bltin.c 2025/04/11 20:55:49 1.21 @@ -1,5 +1,5 @@ /* - * $Id: global_bltin.c,v 1.19 2025/04/11 16:52:05 snw Exp $ + * $Id: global_bltin.c,v 1.21 2025/04/11 20:55:49 snw Exp $ * freem database engine * * @@ -24,6 +24,12 @@ * along with FreeM. If not, see . * * $Log: global_bltin.c,v $ + * Revision 1.21 2025/04/11 20:55:49 snw + * Disable -Wunused-result where possible + * + * Revision 1.20 2025/04/11 18:24:32 snw + * Fix bug in memory cache + * * Revision 1.19 2025/04/11 16:52:05 snw * Fix indentation in global handler * @@ -499,9 +505,8 @@ int gbl_read_block(global_handle *g, uns g->use_count++; - fstat (g->fd, &gstat); if (!g->locked) gbl_lock (g, 1); - + fstat (g->fd, &gstat); if ((g->last_block == blocknum) && (g->have_cached_block) && @@ -509,7 +514,6 @@ int gbl_read_block(global_handle *g, uns (gstat.st_mtime < g->last_read_time)) { /* the global has not been modified since the last read; grab from memory */ g->memory_reads++; - g->last_read_time = time (0L); memcpy (block, g->last_block_accessed, g->header.block_size); } else { @@ -520,14 +524,14 @@ int gbl_read_block(global_handle *g, uns /* update cache */ memcpy (g->last_block_accessed, block, g->header.block_size); g->have_cached_block = TRUE; - g->last_read_time = time (0L); - g->cached_block_num = blocknum; - + g->cached_block_num = blocknum; g->last_block = blocknum; - g->use_count++; g->read_ops++; } + g->last_read_time = time (0L); + g->use_count++; + if (g->locked) gbl_unlock (g); return TRUE; @@ -748,83 +752,62 @@ void global_bltin (short action, char *k register long int k; register long int ch; - j = 0; - + j = 0; hdr_offset = sizeof (global_header); /* process optional limitations */ if (glvnflag.all && key[0] >= '%' && key[0] <= 'z') { if ((i = glvnflag.one[0])) { /* number of significant chars */ - j = 0; while ((k = key[j]) != DELIM && k != EOL) { - if (j >= i) { - while ((k = key[++j]) != DELIM && k != EOL); - stcpy (&key[i], &key[j]); - break; } - j++; - } } if (glvnflag.one[1]) { /* upper/lower sensitivity */ - j = 0; - while ((k = key[j]) != DELIM && k != EOL) { - if (k >= 'a' && k <= 'z') key[j] = k - 32; - j++; - } } if ((i = glvnflag.one[2])) { - if (stlen (key) > i) { merr_raise (M75); return; } /* key length limit */ - } if ((i = glvnflag.one[3])) { /* subscript length limit */ - + j = 0; - while ((k = key[j++]) != DELIM && k != EOL); - + if (k == DELIM) { - k = 0; for (;;) { - k = key[j++]; - if (k == DELIM || k == EOL) { - if (k > i) { merr_raise (M75); return; } - k = 0; } - if (k == EOL) break; k++; } } + } } @@ -887,22 +870,6 @@ void global_bltin (short action, char *k } } - if (v22ptr) { - - procv22 (key); - - if (key[0] != '^') { - char losav[256]; - - stcpy (losav, l_o_val); - symtab (action, key, data); - stcpy (g_o_val, l_o_val); - stcpy (l_o_val, losav); - - return; - } - } - g = gbl_handle (key); i = gbl_path (key, filnam); @@ -967,10 +934,8 @@ void global_bltin (short action, char *k compactkey[k++] = ch << 1; } - else if (ch < SP || ch >= DEL) { - - /*no CTRLs */ - + else if (ch < SP || ch >= DEL) { + /* no CTRLs */ merr_raise (SBSCR); return; } @@ -1158,7 +1123,7 @@ reopen: if (action == get_sym) { - tfast0: +tfast0: gbl_lock (g, 3); if (g->fast_path > 0) goto tfast1; /* try again last block */ @@ -1168,7 +1133,7 @@ reopen: for (;;) { - tfast1: +tfast1: gbl_read_block (g, blknbr, block); /* temporarily disabled @@ -2604,36 +2569,12 @@ s10: } case killone: - { if (found == 2) goto killo; /* entry found use normal kill routine */ goto quit; } - case merge_sym: - - printf("MERGE NOT IMPLEMENTED FOR GLOBALS\n"); - -#ifdef DEBUG_GBL - - int loop; - - printf ("DEBUG MERGE: "); - printf ("[key] is ["); - - for (loop = 0; key[loop] != EOL; loop++) printf ("%c", (key[loop] == DELIM) ? '!' : key[loop]); - - printf ("]\r\n"); - printf ("[data] is ["); - - for(loop = 0; data[loop] != EOL; loop++) printf ("%c", (data[loop] == DELIM) ? '!' : data[loop]); - - printf("]\r\n"); - -#endif - return; - default: merr_raise (INVREF); /* accidental call with wrong action code (v22-stuff) */