Commit d8d3b669 authored by Richard Levitte's avatar Richard Levitte
Browse files

Make "openssl rehash" work on VMS 8.3 and up



A spelling error prevented it from building correctly.
Furthermore, we need to be more careful when to add a / at the end
of the dirname and when not.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2706)
(cherry picked from commit 5c80e2af)
parent 05361483
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
#include "apps.h"

#if defined(OPENSSL_SYS_UNIX) || defined(__APPLE__) || \
    (defined(__VMS) && defined(__DECC) && __CTRL_VER >= 80300000)
    (defined(__VMS) && defined(__DECC) && __CRTL_VER >= 80300000)
# include <unistd.h>
# include <stdio.h>
# include <limits.h>
@@ -267,6 +267,20 @@ static void str_free(char *s)
    OPENSSL_free(s);
}

static int ends_with_dirsep(const char *path)
{
    if (*path != '\0')
        path += strlen(path) - 1;
# ifdef __VMS
    if (*path == ']' || *path == '>' || *path == ':')
        return 1;
# elif _WIN32
    if (*path == '\\')
        return 1;
# endif
    return *path == '/';
}

/*
 * Process a directory; return number of errors found.
 */
@@ -289,7 +303,7 @@ static int do_dir(const char *dirname, enum Hash h)
        return 1;
    }
    buflen = strlen(dirname);
    pathsep = (buflen && dirname[buflen - 1] == '/') ? "" : "/";
    pathsep = (buflen && !ends_with_dirsep(dirname)) ? "/": "";
    buflen += NAME_MAX + 1 + 1;
    buf = app_malloc(buflen, "filename buffer");