version 1.1, 2025/01/19 02:04:04
|
version 1.6, 2025/04/13 04:22:43
|
Line 1
|
Line 1
|
/* |
/* |
* * |
* $Id$ |
* * * |
* TP global checkpointing code |
* * * |
|
* *************** |
|
* * * * * |
|
* * MUMPS * |
|
* * * * * |
|
* *************** |
|
* * * |
|
* * * |
|
* * |
|
* |
|
* tp_check.c |
|
* TP database checkpointing code |
|
* |
* |
* |
* |
* Author: Serena Willis <jpw@coherent-logic.com> |
* Author: Serena Willis <snw@coherent-logic.com> |
* Copyright (C) 1998 MUG Deutschland |
* Copyright (C) 1998 MUG Deutschland |
* Copyright (C) 2022 Coherent Logic Development LLC |
* Copyright (C) 2022, 2025 Coherent Logic Development LLC |
* |
* |
* |
* |
* This file is part of FreeM. |
* This file is part of FreeM. |
Line 35
|
Line 23
|
* You should have received a copy of the GNU Affero Public License |
* You should have received a copy of the GNU Affero Public License |
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* |
* |
|
* $Log$ |
|
* Revision 1.6 2025/04/13 04:22:43 snw |
|
* Fix snprintf calls |
|
* |
|
* Revision 1.5 2025/04/09 19:52:02 snw |
|
* Eliminate as many warnings as possible while building with -Wall |
|
* |
|
* Revision 1.4 2025/03/22 18:43:54 snw |
|
* Make STRLEN 255 chars and add BIGSTR macro for larger buffers |
|
* |
|
* Revision 1.3 2025/03/09 19:50:47 snw |
|
* Second phase of REUSE compliance and header reformat |
|
* |
|
* |
|
* SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC |
|
* SPDX-License-Identifier: AGPL-3.0-or-later |
**/ |
**/ |
|
|
#include <stdlib.h> |
#include <stdlib.h> |
Line 53 cptab *cptab_head[TP_MAX_NEST];
|
Line 57 cptab *cptab_head[TP_MAX_NEST];
|
cptab *cptab_insert(int tlevel, char *global) |
cptab *cptab_insert(int tlevel, char *global) |
{ |
{ |
cptab *t; |
cptab *t; |
char mode; |
|
|
|
short g_exists; |
short g_exists; |
|
|
char *gc_ns; |
char *gc_ns; |
char *gc_pth; |
char *gc_pth; |
|
|
gc_ns = (char *) malloc (STRLEN * sizeof (char)); |
gc_ns = (char *) malloc (STRLEN * sizeof (char)); |
NULLPTRCHK(gc_ns,"cptab_insert"); |
NULLPTRCHK(gc_ns,"cptab_insert"); |
|
|
gc_pth = (char *) malloc (STRLEN * sizeof (char)); |
gc_pth = (char *) malloc (PATHLEN * sizeof (char)); |
NULLPTRCHK(gc_pth,"cptab_insert"); |
NULLPTRCHK(gc_pth,"cptab_insert"); |
|
|
for (t = cptab_head[tlevel]; t != NULL; t = t->next) { |
for (t = cptab_head[tlevel]; t != NULL; t = t->next) { |
Line 89 cptab *cptab_insert(int tlevel, char *gl
|
Line 90 cptab *cptab_insert(int tlevel, char *gl
|
t->file = (char *) malloc (sizeof (char) * (strlen (gc_pth))); |
t->file = (char *) malloc (sizeof (char) * (strlen (gc_pth))); |
NULLPTRCHK(t->file,"cptab_insert"); |
NULLPTRCHK(t->file,"cptab_insert"); |
|
|
t->cp_file = (char *) malloc (sizeof (char) * STRLEN); |
t->cp_file = (char *) malloc (sizeof (char) * PATHLEN); |
NULLPTRCHK(t->cp_file,"cptab_insert"); |
NULLPTRCHK(t->cp_file,"cptab_insert"); |
|
|
strcpy (t->file, gc_pth); |
strcpy (t->file, gc_pth); |
stcnv_m2c (t->file); |
stcnv_m2c (t->file); |
|
|
snprintf (t->cp_file, STRLEN - 1, "%s.%d.%d.chk", t->file, pid, tp_level); |
snprintf (t->cp_file, PATHLEN - 1, "%s.%d.%d.chk", t->file, pid, tp_level); |
|
|
free (gc_ns); |
free (gc_ns); |
free (gc_pth); |
free (gc_pth); |
Line 175 void cptab_postcommit(int tlevel)
|
Line 176 void cptab_postcommit(int tlevel)
|
{ |
{ |
cptab *t; |
cptab *t; |
/*char *cmd;*/ |
/*char *cmd;*/ |
int rc; |
|
|
|
/* |
/* |
cmd = (char *) malloc (STRLEN * sizeof (char)); |
cmd = (char *) malloc (STRLEN * sizeof (char)); |
Line 225 short cptab_rollback(int tlevel)
|
Line 225 short cptab_rollback(int tlevel)
|
snprintf (cmd, STRLEN - 1, "/bin/cp '%s' '%s'", t->cp_file, t->file); |
snprintf (cmd, STRLEN - 1, "/bin/cp '%s' '%s'", t->cp_file, t->file); |
rc = system (cmd); |
rc = system (cmd); |
*/ |
*/ |
|
/* TODO: support OS/2 */ |
rc = cp (t->file, t->cp_file); |
rc = cp (t->file, t->cp_file); |
|
|
if (rc != 0) { |
if (rc != 0) { |