60 lines
1.9 KiB
C
60 lines
1.9 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001, 2011 Fidelity Information Services, 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 "gtm_string.h"
|
|
|
|
#include <rtnhdr.h>
|
|
#include "op.h"
|
|
|
|
GBLREF mident_fixed zlink_mname;
|
|
GBLREF rtn_tabent *rtn_names;
|
|
|
|
error_def(ERR_ZLINKFILE);
|
|
error_def(ERR_ZLMODULE);
|
|
|
|
/* For routine name given, return routine header address if rhd not already set */
|
|
rhdtyp *op_rhdaddr(mval *name, rhdtyp *rhd)
|
|
{
|
|
mval routine;
|
|
mident_fixed routname;
|
|
rhdtyp *answer;
|
|
|
|
if (NULL != rhd)
|
|
answer = rhd;
|
|
else
|
|
{
|
|
MV_FORCE_STR(name);
|
|
routine = *name;
|
|
routine.str.len = (MAX_MIDENT_LEN < routine.str.len ? MAX_MIDENT_LEN : routine.str.len);
|
|
memcpy(&routname.c[0], routine.str.addr, routine.str.len);
|
|
routine.str.addr = (char *)&routname.c[0];
|
|
if ((NULL == rtn_names) || (NULL == (answer = find_rtn_hdr(&routine.str)))) /* Note assignment */
|
|
{ /* Initial check for rtn_names is so we avoid the call to find_rtn_hdr() if we have just
|
|
* unlinked all modules as find_rtn_hdr() does not deal well with an empty rtn table.
|
|
*/
|
|
op_zlink(&routine, NULL);
|
|
answer = find_rtn_hdr(&routine.str);
|
|
if (NULL == answer)
|
|
rts_error(VARLSTCNT(8) ERR_ZLINKFILE, 2, name->str.len, name->str.addr,
|
|
ERR_ZLMODULE, 2, strlen(&zlink_mname.c[0]), &zlink_mname);
|
|
# if defined (__alpha) && defined (__vms)
|
|
answer = answer->linkage_ptr;
|
|
if (NULL == answer)
|
|
rts_error(VARLSTCNT(8) ERR_ZLINKFILE, 2, name->str.len, name->str.addr,
|
|
ERR_ZLMODULE, 2, strlen(&zlink_mname.c[0]), zlink_mname.c);
|
|
# endif
|
|
}
|
|
}
|
|
return answer;
|
|
}
|