Time to get rid of some rather silly code duplication - some DSO_ctrl()
authorGeoff Thorpe <geoff@openssl.org>
Sun, 8 Oct 2000 22:32:57 +0000 (22:32 +0000)
committerGeoff Thorpe <geoff@openssl.org>
Sun, 8 Oct 2000 22:32:57 +0000 (22:32 +0000)
commands are common to all DSO_METHODs, hence handle them at the top.

crypto/dso/dso_lib.c

index acd166697eb7b42f893f6dd361165471c07cc1b0..fc3d76034ac8d8211db444fa7c6305af1800490a 100644 (file)
@@ -297,6 +297,22 @@ long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg)
                DSOerr(DSO_F_DSO_CTRL,ERR_R_PASSED_NULL_PARAMETER);
                return(-1);
                }
                DSOerr(DSO_F_DSO_CTRL,ERR_R_PASSED_NULL_PARAMETER);
                return(-1);
                }
+       /* We should intercept certain generic commands and only pass control
+        * to the method-specific ctrl() function if it's something we don't
+        * handle. */
+       switch(cmd)
+               {
+       case DSO_CTRL_GET_FLAGS:
+               return dso->flags;
+       case DSO_CTRL_SET_FLAGS:
+               dso->flags = (int)larg;
+               return(0);
+       case DSO_CTRL_OR_FLAGS:
+               dso->flags |= (int)larg;
+               return(0);
+       default:
+               break;
+               }
        if((dso->meth == NULL) || (dso->meth->dso_ctrl == NULL))
                {
                DSOerr(DSO_F_DSO_CTRL,DSO_R_UNSUPPORTED);
        if((dso->meth == NULL) || (dso->meth->dso_ctrl == NULL))
                {
                DSOerr(DSO_F_DSO_CTRL,DSO_R_UNSUPPORTED);