fis-gtm/sr_unix/gtm_zlib.c

67 lines
1.8 KiB
C

/****************************************************************
* *
* Copyright 2008, 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 <dlfcn.h>
#include "gtm_string.h"
#include "real_len.h" /* for COPY_DLERR_MSG */
#include "lv_val.h" /* needed for "fgncal.h" */
#include "fgncal.h" /* needed for COPY_DLLERR_MSG() */
#include "gtm_zlib.h"
#include "gtmmsg.h"
void gtm_zlib_init(void)
{
char *libname, err_msg[MAX_ERRSTR_LEN];
void_ptr_t handle;
char_ptr_t err_str;
char *zlib_fname[] = {
ZLIB_CMP_FNAME,
ZLIB_UNCMP_FNAME,
};
void **zlib_fptr[] = {
(void **)&zlib_compress_fnptr,
(void **)&zlib_uncompress_fnptr,
};
int findx;
void *fptr;
error_def(ERR_DLLNOOPEN);
error_def(ERR_TEXT);
error_def(ERR_DLLNORTN);
assert(gtm_zlib_cmp_level);
libname = ZLIB_LIBNAME;
handle = dlopen(libname, ZLIB_LIBFLAGS);
if (NULL == handle)
{
COPY_DLLERR_MSG(err_str, err_msg);
gtm_putmsg(VARLSTCNT(8) ERR_DLLNOOPEN, 2, LEN_AND_STR(libname), ERR_TEXT, 2, LEN_AND_STR(err_msg));
gtm_zlib_cmp_level = ZLIB_CMPLVL_NONE; /* dont use compression */
return;
}
for (findx = 0; findx < ZLIB_NUM_DLSYMS; ++findx)
{
fptr = (void *)dlsym(handle, zlib_fname[findx]);
if (NULL == fptr)
{
COPY_DLLERR_MSG(err_str, err_msg);
gtm_putmsg(VARLSTCNT(8) ERR_DLLNORTN, 2, LEN_AND_STR(zlib_fname[findx]), ERR_TEXT, 2, LEN_AND_STR(err_str));
gtm_zlib_cmp_level = ZLIB_CMPLVL_NONE; /* dont use compression */
return;
}
*zlib_fptr[findx] = fptr;
}
return;
}