'flags' should only be set inside DSO_load() if constructing a new DSO
authorGeoff Thorpe <geoff@openssl.org>
Thu, 22 Nov 2001 08:48:09 +0000 (08:48 +0000)
committerGeoff Thorpe <geoff@openssl.org>
Thu, 22 Nov 2001 08:48:09 +0000 (08:48 +0000)
object - otherwise we overwrite any flags that had been previously set in
the DSO before calling DSO_load().

crypto/dso/dso.h
crypto/dso/dso_lib.c

index 2855cf7..a167845 100644 (file)
@@ -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. */
index ba1b196..556069b 100644 (file)
@@ -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);