X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=apps%2Fapps.c;h=2740275fe5cab21f618b9f9e00817a9dea4caa9e;hb=3f5abab94104574c32991243668ac633a8d8e525;hp=6ae85233ccdc6aefabaed72ab532cf9f39a850d4;hpb=a4107d73d597a6f8754f7cf5c8c53d2097bea652;p=openssl.git diff --git a/apps/apps.c b/apps/apps.c index 6ae85233cc..2740275fe5 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -25,12 +25,6 @@ #endif #include #include -#ifdef __VMS -# include -# include -# include -# include -#endif #include #include #include @@ -1056,7 +1050,8 @@ int set_name_ex(unsigned long *flags, const char *arg) }; if (set_multi_opts(flags, arg, ex_tbl) == 0) return 0; - if ((*flags & XN_FLAG_SEP_MASK) == 0) + if (*flags != XN_FLAG_COMPAT + && (*flags & XN_FLAG_SEP_MASK) == 0) *flags |= XN_FLAG_SEP_CPLUS_SPC; return 1; } @@ -2370,116 +2365,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. - */ -#if !defined(_WIN32) -char *app_dirname(char *path) -{ - return posix_dirname(path); -} -#elif defined(__VMS) -/* - * sys$filescan fills the given item list with pointers into the original - * path string, so all we need to do is to find the file name and simply - * put a NUL byte wherever the FSCN$_NAME pointer points. If there is no - * file name part and the path string isn't the empty string, we know for - * a fact that the whole string is a directory spec and return it as is. - * Otherwise or if that pointer is the starting address of the original - * path string, we know to return "sys$disk:[]", which corresponds to the - * Unixly ".". - * - * If sys$filescan returns an error status, we know that this is not - * parsable as a VMS file spec, and then use the fallback, in case we - * have a Unix type path. - */ -char *app_dirname(char *path) -{ - char *ret = "sys$disk:[]"; - struct dsc$descriptor_s dsc_path = { 0 }; - ile2 itemlist[] = { - {0, FSCN$_NAME, 0}, - {0, 0, 0} - }; - int fields; - int status; - - dsc_path.dsc$a_pointer = path; - dsc_path.dsc$w_length = strlen(path); - status = sys$filescan(&dsc_path, itemlist, &fields, 0, 0); - - if (!(status & 1)) - return posix_dirname(path); - - if ((fields & (1 << FSCN$_NAME)) == 0) { - if (dsc_path.dsc$w_length != 0) - ret = path; - } else if (itemlist[0].ile2$ps_bufaddr != path) { - if (itemlist[0].ile2$ps_bufaddr != path) { - *itemlist[0].ile2$ps_bufaddr = '\0'; - ret = path; - } - } - return ret; -} -#endif - /* raw_read|write section */ #if defined(__VMS) # include "vms_term_sock.h" @@ -2602,7 +2487,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;