提交 9163b8fb 编写于 作者: G Geoff Thorpe

'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().
上级 a542db90
...@@ -227,8 +227,7 @@ DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth); ...@@ -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) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册