Make the DSO code for VMS work again. First attempt.
This commit is contained in:
parent
7f2113a2d5
commit
856d456a71
@ -133,10 +133,18 @@ DSO_METHOD *DSO_METHOD_vms(void)
|
|||||||
|
|
||||||
static int vms_load(DSO *dso)
|
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;
|
DSO_VMS_INTERNAL *p;
|
||||||
const char *sp1, *sp2; /* Search result */
|
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:
|
/* A file specification may look like this:
|
||||||
*
|
*
|
||||||
* node::dev:[dir-spec]name.type;ver
|
* node::dev:[dir-spec]name.type;ver
|
||||||
@ -178,14 +186,14 @@ static int vms_load(DSO *dso)
|
|||||||
|| (sp1 - filename) + strlen(sp2) > FILENAME_MAX)
|
|| (sp1 - filename) + strlen(sp2) > FILENAME_MAX)
|
||||||
{
|
{
|
||||||
DSOerr(DSO_F_VMS_LOAD,DSO_R_FILENAME_TOO_BIG);
|
DSOerr(DSO_F_VMS_LOAD,DSO_R_FILENAME_TOO_BIG);
|
||||||
return(0);
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = (DSO_VMS_INTERNAL *)OPENSSL_malloc(sizeof(DSO_VMS_INTERNAL));
|
p = (DSO_VMS_INTERNAL *)OPENSSL_malloc(sizeof(DSO_VMS_INTERNAL));
|
||||||
if(p == NULL)
|
if(p == NULL)
|
||||||
{
|
{
|
||||||
DSOerr(DSO_F_VMS_LOAD,ERR_R_MALLOC_FAILURE);
|
DSOerr(DSO_F_VMS_LOAD,ERR_R_MALLOC_FAILURE);
|
||||||
return(0);
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
strncpy(p->filename, sp1, sp2-sp1);
|
strncpy(p->filename, sp1, sp2-sp1);
|
||||||
@ -207,16 +215,19 @@ static int vms_load(DSO *dso)
|
|||||||
if(!sk_push(dso->meth_data, (char *)p))
|
if(!sk_push(dso->meth_data, (char *)p))
|
||||||
{
|
{
|
||||||
DSOerr(DSO_F_VMS_LOAD,DSO_R_STACK_ERROR);
|
DSOerr(DSO_F_VMS_LOAD,DSO_R_STACK_ERROR);
|
||||||
OPENSSL_free(p);
|
goto err;
|
||||||
return(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Success (for now, we lie. We actually do not know...) */
|
||||||
|
dso->loaded_filename = filename;
|
||||||
return(1);
|
return(1);
|
||||||
#else
|
err:
|
||||||
/* See the comments lower down in the vms_name_converter
|
/* Cleanup! */
|
||||||
* "implementation" :-) */
|
if(p != NULL)
|
||||||
please_break_compilation();
|
OPENSSL_free(p);
|
||||||
return(bother_richard);
|
if(filename != NULL)
|
||||||
#endif
|
OPENSSL_free(filename);
|
||||||
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note that this doesn't actually unload the shared image, as there is no
|
/* 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;
|
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
|
return(filename);
|
||||||
* 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* VMS */
|
#endif /* VMS */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user