Annotation of freem/src/ssvn_lock.c, revision 1.2

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);
1.2     ! snw        85:     snprintf (d_buf, STRLEN - 1, "%ld,%d\201\0", (long) owner_job, count);
1.1       snw        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>