diff --git a/apps/apps.c b/apps/apps.c index 6ae85233ccdc6aefabaed72ab532cf9f39a850d4..2ab65b72134465aa8a5fde78481fcf8c9d9c571f 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 @@ -2427,57 +2421,14 @@ static char *posix_dirname(char *path) } /* - * TODO: implement app_dirname for Windows. + * TODO: implement app_dirname for Windows + * and VMS. */ -#if !defined(_WIN32) +#if !defined(_WIN32) && !defined(__VMS) 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 */