'flags' should only be set inside DSO_load() if constructing a new DSO
object - otherwise we overwrite any flags that had been previously set in the DSO before calling DSO_load().
This commit is contained in:
parent
a542db90c6
commit
9163b8fb23
@ -227,8 +227,7 @@ DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth);
|
|||||||
* for the first and third parameters. Use DSO_up and DSO_free for
|
* for the first and third parameters. Use DSO_up and DSO_free for
|
||||||
* subsequent reference count handling. Any flags passed in will be set
|
* subsequent reference count handling. Any flags passed in will be set
|
||||||
* in the constructed DSO after its init() function but before the
|
* in the constructed DSO after its init() function but before the
|
||||||
* load operation. This will be done with;
|
* load operation. If 'dso' is non-NULL, 'flags' is ignored. */
|
||||||
* DSO_ctrl(dso, DSO_CTRL_SET_FLAGS, flags, NULL); */
|
|
||||||
DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags);
|
DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags);
|
||||||
|
|
||||||
/* This function binds to a variable inside a shared library. */
|
/* This function binds to a variable inside a shared library. */
|
||||||
|
@ -205,6 +205,12 @@ DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
allocated = 1;
|
allocated = 1;
|
||||||
|
/* Pass the provided flags to the new DSO object */
|
||||||
|
if(DSO_ctrl(ret, DSO_CTRL_SET_FLAGS, flags, NULL) < 0)
|
||||||
|
{
|
||||||
|
DSOerr(DSO_F_DSO_LOAD,DSO_R_CTRL_FAILED);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ret = dso;
|
ret = dso;
|
||||||
@ -228,13 +234,6 @@ DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags)
|
|||||||
DSOerr(DSO_F_DSO_LOAD,DSO_R_NO_FILENAME);
|
DSOerr(DSO_F_DSO_LOAD,DSO_R_NO_FILENAME);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
/* Bleurgh ... have to check for negative return values for
|
|
||||||
* errors. <grimace> */
|
|
||||||
if(DSO_ctrl(ret, DSO_CTRL_SET_FLAGS, flags, NULL) < 0)
|
|
||||||
{
|
|
||||||
DSOerr(DSO_F_DSO_LOAD,DSO_R_CTRL_FAILED);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if(ret->meth->dso_load == NULL)
|
if(ret->meth->dso_load == NULL)
|
||||||
{
|
{
|
||||||
DSOerr(DSO_F_DSO_LOAD,DSO_R_UNSUPPORTED);
|
DSOerr(DSO_F_DSO_LOAD,DSO_R_UNSUPPORTED);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user