int4 lp_confirm (int4 lid, uint4 lkid) /* int4 lid ; license ID uint4 lkid ; lock ID */ { error_def (LP_NOTACQ) ; struct { short bln ; short cod ; char *buf ; int4 *rln ;} itm[3] ; int4 status ; int4 iosb[2] ; int4 parid,len,len1 ; int4 res ; /* parent lock resource name */ itm[0].bln= 4 ; itm[0].cod= LKI$_PARENT ; itm[0].buf= &parid ; itm[0].rln= &len ; itm[1].bln= 4 ; itm[1].cod= LKI$_RESNAM ; itm[1].buf= &res ; itm[1].rln= &len1 ; itm[2].bln = itm[2].cod = 0; itm[2].buf = itm[2].rln = 0; if (lkid!=0 && lid!=0) { status= gtm_getlkiw(EFN$C_ENF,&lkid,itm,iosb,0,0,0) ; PROPER(status) ; if (parid!=0 && process_id==res) { status= gtm_getlkiw(EFN$C_ENF,&parid,&itm[1],iosb,0,0,0) ; PROPER(status) ; status= ( lid==res ? SS$_NORMAL : LP_NOTACQ ) ; } else { status= LP_NOTACQ ; } } else { status= LP_NOTACQ ; } return status ; }
void util_cm_print(clb_struct *lnk, int code, char *message, int flush, ...) { va_list var; int4 status, i; size_t msglen ; VAR_START(var, flush); if (outptr == outbuff) { *outptr++ = code; } if (message) { util_out_print(NULL, RESET); /* Clear any pending messages */ util_out_print_vaparm(message, NOFLUSH, var, MAXPOSINT4); msglen = (size_t)((char *)util_outptr - (char *)util_outbuff); memcpy(outptr, util_outbuff, msglen); outptr += msglen; } va_end(last_va_list_ptr); va_end(var); switch (flush) { case NOFLUSH: break; case FLUSH : *outptr++ = 0 ; lnk->mbf = outbuff ; lnk->cbl = outptr - outbuff ; lnk->ast = 0 ; status = cmi_write(lnk) ; PROPER(code, status) ; /* Note: fall into reset.. */ case RESET : outptr = outbuff ; break; default : break ; } return; }