apps/speed.c: add -aead flag.
[openssl.git] / apps / apps.c
index 3b713f4acc91985a1b9146d718a03005c046d5df..d5a6aea206ed8c094cf8d1324b33e0a615d49a6f 100644 (file)
@@ -1532,12 +1532,27 @@ CA_DB *load_index(const char *dbfile, DB_ATTR *db_attr)
     BIO *in;
     CONF *dbattr_conf = NULL;
     char buf[BSIZE];
+#ifndef OPENSSL_NO_POSIX_IO
+    FILE *dbfp;
+    struct stat dbst;
+#endif
 
     in = BIO_new_file(dbfile, "r");
     if (in == NULL) {
         ERR_print_errors(bio_err);
         goto err;
     }
+
+#ifndef OPENSSL_NO_POSIX_IO
+    BIO_get_fp(in, &dbfp);
+    if (fstat(fileno(dbfp), &dbst) == -1) {
+        SYSerr(SYS_F_FSTAT, errno);
+        ERR_add_error_data(3, "fstat('", dbfile, "')");
+        ERR_print_errors(bio_err);
+        goto err;
+    }
+#endif
+
     if ((tmpdb = TXT_DB_read(in, DB_NUMBER)) == NULL)
         goto err;
 
@@ -1564,6 +1579,11 @@ CA_DB *load_index(const char *dbfile, DB_ATTR *db_attr)
         }
     }
 
+    retdb->dbfname = OPENSSL_strdup(dbfile);
+#ifndef OPENSSL_NO_POSIX_IO
+    retdb->dbst = dbst;
+#endif
+
  err:
     NCONF_free(dbattr_conf);
     TXT_DB_free(tmpdb);
@@ -1571,6 +1591,9 @@ CA_DB *load_index(const char *dbfile, DB_ATTR *db_attr)
     return retdb;
 }
 
+/*
+ * Returns > 0 on success, <= 0 on error
+ */
 int index_index(CA_DB *db)
 {
     if (!TXT_DB_create_index(db->db, DB_serial, NULL,
@@ -1709,6 +1732,7 @@ void free_index(CA_DB *db)
 {
     if (db) {
         TXT_DB_free(db->db);
+        OPENSSL_free(db->dbfname);
         OPENSSL_free(db);
     }
 }
@@ -2340,73 +2364,6 @@ int app_isdir(const char *name)
 }
 #endif
 
-/* app_dirname section */
-
-/*
- * This exactly follows what POSIX's
- * dirname does, but is implemented
- * in a more platform independent way.
- *
- * path        dirname
- * /usr/lib    /usr
- * /usr/       /
- * usr         .
- * /           /
- * .           .
- * ..          .
- * ""          .
- *
- * Note: this function also keeps the
- * possibility of modifying the 'path'
- * string same as POSIX dirname.
- */
-static char *posix_dirname(char *path)
-{
-    size_t l;
-    char *ret = ".";
-
-    l = strlen(path);
-    if (l == 0)
-        goto out;
-    if (strcmp(path, ".") == 0)
-        goto out;
-    if (strcmp(path, "..") == 0)
-        goto out;
-    if (strcmp(path, "/") == 0) {
-        ret = "/";
-        goto out;
-    }
-    if (path[l - 1] == '/') {
-        /* /usr/ */
-        path[l - 1] = '\0';
-    }
-    if ((ret = strrchr(path, '/')) == NULL) {
-        /* usr */
-        ret = ".";
-    } else if (ret == path) {
-        /* /usr */
-        *++ret = '\0';
-        ret = path;
-    } else {
-        /* /usr/lib */
-        *ret = '\0';
-        ret = path;
-    }
- out:
-    return ret;
-}
-
-/*
- * TODO: implement app_dirname for Windows
- * and VMS.
- */
-#if !defined(_WIN32) && !defined(__VMS)
-char *app_dirname(char *path)
-{
-    return posix_dirname(path);
-}
-#endif
-
 /* raw_read|write section */
 #if defined(__VMS)
 # include "vms_term_sock.h"
@@ -2529,7 +2486,7 @@ BIO *dup_bio_err(int format)
     return b;
 }
 
-void destroy_prefix_method()
+void destroy_prefix_method(void)
 {
     BIO_meth_free(prefix_method);
     prefix_method = NULL;