Commit 9163b8fb authored by Geoff Thorpe's avatar Geoff Thorpe
Browse files

'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().
parent a542db90
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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
 * subsequent reference count handling. Any flags passed in will be set
 * in the constructed DSO after its init() function but before the
 * load operation. This will be done with;
 *    DSO_ctrl(dso, DSO_CTRL_SET_FLAGS, flags, NULL); */
 * load operation. If 'dso' is non-NULL, 'flags' is ignored. */
DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags);

/* This function binds to a variable inside a shared library. */
+6 −7
Original line number Diff line number Diff line
@@ -205,6 +205,12 @@ DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags)
			goto err;
			}
		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
		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);
		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)
		{
		DSOerr(DSO_F_DSO_LOAD,DSO_R_UNSUPPORTED);