Annotation of freem/src/ssvn_lock.c, revision 1.1
1.1 ! snw 1: /*
! 2: * *
! 3: * * *
! 4: * * *
! 5: * ***************
! 6: * * * * *
! 7: * * MUMPS *
! 8: * * * * *
! 9: * ***************
! 10: * * *
! 11: * * *
! 12: * *
! 13: *
! 14: * ssvn_lock.c
! 15: * ^$LOCK ssv
! 16: *
! 17: *
! 18: * Author: Serena Willis <jpw@coherent-logic.com>
! 19: * Copyright (C) 1998 MUG Deutschland
! 20: * Copyright (C) 2020 Coherent Logic Development LLC
! 21: *
! 22: *
! 23: * This file is part of FreeM.
! 24: *
! 25: * FreeM is free software: you can redistribute it and/or modify
! 26: * it under the terms of the GNU Affero Public License as published by
! 27: * the Free Software Foundation, either version 3 of the License, or
! 28: * (at your option) any later version.
! 29: *
! 30: * FreeM is distributed in the hope that it will be useful,
! 31: * but WITHOUT ANY WARRANTY; without even the implied warranty of
! 32: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 33: * GNU Affero Public License for more details.
! 34: *
! 35: * You should have received a copy of the GNU Affero Public License
! 36: * along with FreeM. If not, see <https://www.gnu.org/licenses/>.
! 37: *
! 38: **/
! 39:
! 40: #include <stdio.h>
! 41: #include <stdlib.h>
! 42: #include <string.h>
! 43:
! 44: #include "mpsdef.h"
! 45: #include "mref.h"
! 46:
! 47: void ssvn_lock_add(char *key, pid_t owner_job, int count)
! 48: {
! 49: register int i;
! 50:
! 51: char *t_buf;
! 52: char *k_buf;
! 53: char *d_buf;
! 54: freem_ref_t *r;
! 55:
! 56: t_buf = (char *) malloc (STRLEN * sizeof (char));
! 57: NULLPTRCHK(t_buf,"ssvn_lock_add");
! 58:
! 59: k_buf = (char *) malloc (STRLEN * sizeof (char));
! 60: NULLPTRCHK(k_buf,"ssvn_lock_add");
! 61:
! 62: d_buf = (char *) malloc (STRLEN * sizeof (char));
! 63: NULLPTRCHK(d_buf,"ssvn_lock_add");
! 64:
! 65: r = (freem_ref_t *) malloc (sizeof (freem_ref_t));
! 66: NULLPTRCHK(r,"ssvn_lock_add");
! 67:
! 68: mref_init (r, MREF_RT_GLOBAL, "");
! 69: internal_to_mref (r, key);
! 70: mref_to_external (r, t_buf);
! 71:
! 72: //printf ("key = '%s'\r\n", key);
! 73: //printf ("r = '%s'\r\n", t_buf);
! 74:
! 75: for (i = 0; i < strlen (t_buf); i++) {
! 76:
! 77: if (t_buf[i] == '\001') {
! 78: t_buf[i] = '\0';
! 79: break;
! 80: }
! 81:
! 82: }
! 83:
! 84: snprintf (k_buf, STRLEN - 1, "^$LOCK\202%s\201", t_buf);
! 85: snprintf (d_buf, STRLEN - 1, "%ld,%d\201\0", owner_job, count);
! 86:
! 87: symtab_shm (set_sym, k_buf, d_buf);
! 88:
! 89: free (t_buf);
! 90: free (k_buf);
! 91: free (d_buf);
! 92: free (r);
! 93:
! 94: }
! 95:
! 96: void ssvn_lock_remove(char *key)
! 97: {
! 98: register int i;
! 99:
! 100: char *t_buf;
! 101: char *k_buf;
! 102: char *d_buf;
! 103: freem_ref_t *r;
! 104:
! 105: t_buf = (char *) malloc (STRLEN * sizeof (freem_ref_t));
! 106: NULLPTRCHK(t_buf,"ssvn_lock_add");
! 107:
! 108: k_buf = (char *) malloc (STRLEN * sizeof (freem_ref_t));
! 109: NULLPTRCHK(k_buf,"ssvn_lock_add");
! 110:
! 111: d_buf = (char *) malloc (STRLEN * sizeof (freem_ref_t));
! 112: NULLPTRCHK(d_buf,"ssvn_lock_add");
! 113:
! 114: r = (freem_ref_t *) malloc (sizeof (freem_ref_t));
! 115: NULLPTRCHK(r,"ssvn_lock_add");
! 116:
! 117: mref_init (r, MREF_RT_GLOBAL, "");
! 118: internal_to_mref (r, key);
! 119: mref_to_external (r, t_buf);
! 120:
! 121: for (i = 0; i < strlen (t_buf); i++) {
! 122:
! 123: if (t_buf[i] == '\001') {
! 124: t_buf[i] = '\0';
! 125: break;
! 126: }
! 127:
! 128: }
! 129:
! 130: snprintf (k_buf, STRLEN - 1, "^$LOCK\202%s\201", t_buf);
! 131: snprintf (d_buf, STRLEN - 1, " \201");
! 132:
! 133: symtab_shm (kill_sym, k_buf, d_buf);
! 134:
! 135: }
! 136:
! 137: void ssvn_lock(short action, char *key, char *data)
! 138: {
! 139:
! 140: switch (action) {
! 141:
! 142: case set_sym:
! 143: case kill_sym:
! 144: //TODO: remove lock
! 145: merr_raise (M29);
! 146: return;
! 147:
! 148: default:
! 149: symtab_shm (action, key, data);
! 150: break;
! 151:
! 152: }
! 153:
! 154: return;
! 155: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>