80 lines
2.0 KiB
C
80 lines
2.0 KiB
C
|
/****************************************************************
|
||
|
* *
|
||
|
* Copyright 2001, 2004 Sanchez Computer Associates, Inc. *
|
||
|
* *
|
||
|
* This source code contains the intellectual property *
|
||
|
* of its copyright holder(s), and is made available *
|
||
|
* under a license. If you do not know the terms of *
|
||
|
* the license, please stop and do not read further. *
|
||
|
* *
|
||
|
****************************************************************/
|
||
|
|
||
|
#include "mdef.h"
|
||
|
#include "cmidef.h"
|
||
|
#include "hashtab_mname.h" /* needed for cmmdef.h */
|
||
|
#include "cmmdef.h"
|
||
|
#include "mlkdef.h"
|
||
|
#include "gvcmz.h"
|
||
|
#include "cmi.h"
|
||
|
#include "iosp.h"
|
||
|
|
||
|
GBLDEF unsigned char cmlk_num;
|
||
|
|
||
|
void gvcmz_sndlkremove(struct CLB *lnk, unsigned char oper, unsigned char cancel)
|
||
|
{
|
||
|
uint4 status,count;
|
||
|
unsigned char *ptr;
|
||
|
mlk_pvtblk *temp,*temp1;
|
||
|
|
||
|
error_def(ERR_BADSRVRNETMSG);
|
||
|
|
||
|
ptr = lnk->mbf;
|
||
|
*ptr++ = cancel;
|
||
|
*ptr++ = oper;
|
||
|
*ptr++ = cmlk_num;
|
||
|
lnk->cbl = S_HDRSIZE + S_LAFLAGSIZE + 1;
|
||
|
if (cancel == CMMS_L_LKDELETE)
|
||
|
{
|
||
|
gvcmz_lksublist(lnk);
|
||
|
temp = ((link_info*)(lnk->usr))->netlocks;
|
||
|
while (temp)
|
||
|
{
|
||
|
temp1 = temp->next;
|
||
|
free(temp);
|
||
|
temp = temp1;
|
||
|
}
|
||
|
((link_info*)(lnk->usr))->netlocks = 0;
|
||
|
((link_info*)(lnk->usr))->lck_info &= ~REQUEST_PENDING;
|
||
|
}
|
||
|
status = cmi_write(lnk);
|
||
|
if (CMI_ERROR(status))
|
||
|
{
|
||
|
((link_info *)(lnk->usr))->neterr = TRUE;
|
||
|
gvcmz_error(cancel, status);
|
||
|
return;
|
||
|
}
|
||
|
status = cmi_read(lnk);
|
||
|
if (CMI_ERROR(status))
|
||
|
{
|
||
|
((link_info *)(lnk->usr))->neterr = TRUE;
|
||
|
gvcmz_error(cancel, status);
|
||
|
return;
|
||
|
}
|
||
|
if (cancel == CMMS_L_LKCANCEL && (*(lnk->mbf) == CMMS_M_LKGRANTED || *(lnk->mbf) == CMMS_M_LKSUSPENDED))
|
||
|
{ /* because a LKCANCEL can be sent on an interrupt, allow for a message underway */
|
||
|
status = cmi_read(lnk);
|
||
|
if (CMI_ERROR(status))
|
||
|
{
|
||
|
((link_info *)(lnk->usr))->neterr = TRUE;
|
||
|
gvcmz_error(cancel, status);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
if (*(lnk->mbf) != CMMS_M_LKDELETED)
|
||
|
{
|
||
|
if (*(lnk->mbf) != CMMS_E_ERROR)
|
||
|
rts_error(VARLSTCNT(1) ERR_BADSRVRNETMSG);
|
||
|
gvcmz_errmsg(lnk,FALSE);
|
||
|
}
|
||
|
}
|