version 1.1, 2025/01/19 02:04:04
|
version 1.6, 2025/04/13 04:22:43
|
Line 1
|
Line 1
|
/* |
/* |
* * |
* $Id$ |
* * * |
|
* * * |
|
* *************** |
|
* * * * * |
|
* * MUMPS * |
|
* * * * * |
|
* *************** |
|
* * * |
|
* * * |
|
* * |
|
* |
|
* locktab.c |
|
* lock table implementation |
* lock table implementation |
* |
* |
* |
* |
* 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) 2021 Coherent Logic Development LLC |
* Copyright (C) 2021, 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/03/24 02:57:25 snw |
|
* Shared memory compatibility fixes for OS/2 |
|
* |
|
* Revision 1.4 2025/03/09 19:14:25 snw |
|
* First phase of REUSE compliance and header reformat |
|
* |
|
* |
|
* SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC |
|
* SPDX-License-Identifier: AGPL-3.0-or-later |
**/ |
**/ |
|
|
#include <stdio.h> |
#include <stdio.h> |
Line 49
|
Line 50
|
#include "mref.h" |
#include "mref.h" |
#include "transact.h" |
#include "transact.h" |
|
|
#if !defined(__OpenBSD__) && !defined(__APPLE__) |
#if !defined(__OpenBSD__) && !defined(__APPLE__) && !defined(__OS2__) |
union semun { |
union semun { |
int val; /* Value for SETVAL */ |
int val; /* Value for SETVAL */ |
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ |
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ |
Line 438 locktab_ent_t *locktab_find(char *key)
|
Line 439 locktab_ent_t *locktab_find(char *key)
|
char chk_ns[255]; |
char chk_ns[255]; |
|
|
if (key[1] == '%') { |
if (key[1] == '%') { |
snprintf (chk_ns, 255, "SYSTEM"); |
snprintf (chk_ns, sizeof (chk_ns) - 1, "SYSTEM"); |
} |
} |
else { |
else { |
snprintf (chk_ns, 255, nsname); |
snprintf (chk_ns, sizeof (chk_ns) - 1, "%s", nsname); |
} |
} |
|
|
for (lck = shm_config->hdr->locktab_head; lck != NULL; lck = lck->next) { |
for (lck = shm_config->hdr->locktab_head; lck != NULL; lck = lck->next) { |
Line 482 locktab_ent_t *locktab_insert(char *key)
|
Line 483 locktab_ent_t *locktab_insert(char *key)
|
ik = internal_to_mref (ik, key); |
ik = internal_to_mref (ik, key); |
|
|
if (key[1] == '%') { |
if (key[1] == '%') { |
snprintf (chk_ns, 255, "SYSTEM"); |
snprintf (chk_ns, sizeof (chk_ns) - 1, "SYSTEM"); |
} |
} |
else { |
else { |
snprintf (chk_ns, 255, "%s", nsname); |
snprintf (chk_ns, sizeof (chk_ns) - 1, "%s", nsname); |
} |
} |
|
|
for (l = shm_config->hdr->locktab_head; l != NULL; l = l->next) { |
for (l = shm_config->hdr->locktab_head; l != NULL; l = l->next) { |
Line 537 new_insert:
|
Line 538 new_insert:
|
} |
} |
|
|
stcpy (l->nref, key); |
stcpy (l->nref, key); |
snprintf (l->namespace, 255, "%s", chk_ns); |
snprintf (l->namespace, sizeof (l->namespace) - 1, "%s", chk_ns); |
|
|
l->owner_job = pid; |
l->owner_job = pid; |
l->ct = 1; |
l->ct = 1; |