Make the DSO code for VMS work again. First attempt.
This commit is contained in:
parent
7f2113a2d5
commit
856d456a71
1 changed files with 24 additions and 30 deletions
|
@ -133,10 +133,18 @@ DSO_METHOD *DSO_METHOD_vms(void)
|
|||
|
||||
static int vms_load(DSO *dso)
|
||||
{
|
||||
#if 0
|
||||
void *ptr = NULL;
|
||||
/* See applicable comments in dso_dl.c */
|
||||
char *filename = DSO_convert_filename(dso, NULL);
|
||||
DSO_VMS_INTERNAL *p;
|
||||
const char *sp1, *sp2; /* Search result */
|
||||
|
||||
if(filename == NULL)
|
||||
{
|
||||
DSOerr(DSO_F_DLFCN_LOAD,DSO_R_NO_FILENAME);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* A file specification may look like this:
|
||||
*
|
||||
* node::dev:[dir-spec]name.type;ver
|
||||
|
@ -178,14 +186,14 @@ static int vms_load(DSO *dso)
|
|||
|| (sp1 - filename) + strlen(sp2) > FILENAME_MAX)
|
||||
{
|
||||
DSOerr(DSO_F_VMS_LOAD,DSO_R_FILENAME_TOO_BIG);
|
||||
return(0);
|
||||
goto err;
|
||||
}
|
||||
|
||||
p = (DSO_VMS_INTERNAL *)OPENSSL_malloc(sizeof(DSO_VMS_INTERNAL));
|
||||
if(p == NULL)
|
||||
{
|
||||
DSOerr(DSO_F_VMS_LOAD,ERR_R_MALLOC_FAILURE);
|
||||
return(0);
|
||||
goto err;
|
||||
}
|
||||
|
||||
strncpy(p->filename, sp1, sp2-sp1);
|
||||
|
@ -207,16 +215,19 @@ static int vms_load(DSO *dso)
|
|||
if(!sk_push(dso->meth_data, (char *)p))
|
||||
{
|
||||
DSOerr(DSO_F_VMS_LOAD,DSO_R_STACK_ERROR);
|
||||
OPENSSL_free(p);
|
||||
return(0);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Success (for now, we lie. We actually do not know...) */
|
||||
dso->loaded_filename = filename;
|
||||
return(1);
|
||||
#else
|
||||
/* See the comments lower down in the vms_name_converter
|
||||
* "implementation" :-) */
|
||||
please_break_compilation();
|
||||
return(bother_richard);
|
||||
#endif
|
||||
err:
|
||||
/* Cleanup! */
|
||||
if(p != NULL)
|
||||
OPENSSL_free(p);
|
||||
if(filename != NULL)
|
||||
OPENSSL_free(filename);
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* Note that this doesn't actually unload the shared image, as there is no
|
||||
|
@ -353,26 +364,9 @@ static DSO_FUNC_TYPE vms_bind_func(DSO *dso, const char *symname)
|
|||
return sym;
|
||||
}
|
||||
|
||||
static char *vms_name_converter(DSO *dso)
|
||||
static char *vms_name_converter(DSO *dso, const char *filename)
|
||||
{
|
||||
/* Implementation note: on VMS is it preferable to do real conversions
|
||||
* here, or to actually have it performed in-line with the bind calls
|
||||
* (given that VMS never actually does a load except implicitly within
|
||||
* the bind functions). Another note: normally (eg. dlfcn), the
|
||||
* DSO_load call will either load, put the loaded filename into the DSO
|
||||
* (which marks it effectively as "read-only"), and return success - or
|
||||
* it will fail. VMS needs to work out what to do - otherwise DSO_load
|
||||
* will always succeed, but leave the DSO looking unloaded (because the
|
||||
* loaded_filename will be NULL still) and then real loading (and
|
||||
* setting of loaded_filename) will only happen during the first bind
|
||||
* call (which should have error checking anyway to prevent you calling
|
||||
* it on an "unloaded" DSO - thus giving VMS *serious* grief). Richard,
|
||||
* what do you think? Is it worth having DSO_load() try to find and pin
|
||||
* itself to a library file (and populate loaded_filename) even though
|
||||
* it's unecessary to actually do a load prior to the first bind call?
|
||||
* I leave it to you ... :-) */
|
||||
deliberately_break_compilation_here();
|
||||
return(1);
|
||||
return(filename);
|
||||
}
|
||||
|
||||
#endif /* VMS */
|
||||
|
|
Loading…
Reference in a new issue