DECC$POSIX_COMPLIANT_PATHNAMES break stat/lstat on directory
Defined DECC$POSIX_COMPLIANT_PATHNAMES to 2 break stat/lstat runtime functions.
Reproducer: Create the follownig procedure pb_pcp.com
$ create foo.c
#include <stat.h>
#include <stdio.h>
#include <errno.h>
main() {
struct stat buffer;
errno = 0;
printf("stat(\"foo/a\"): %d, errno:%d\n",
stat("foo/a", &buffer), errno);
errno = 0;
printf("stat(\"foo/aaa\"): %d, errno:%d\n",
stat("foo/aaa", &buffer), errno);
errno = 0;
printf("stat(\"foo/a/\"): %d, errno:%d\n",
stat("foo/a/", &buffer), errno);
errno = 0;
printf("stat(\"foo/aaa/\"): %d, errno:%d\n",
stat("foo/aaa/", &buffer), errno);
}
$
$ cc foo
$ link foo
$
$ crea/dir [.foo]
$ crea/dir [.foo.a]
$ crea/dir [.foo.aaa]
$
$ write sys$output "without DECC$POSIX_COMPLIANT_PATHNAMES"
$ write sys$output ""
$ run foo
$
$ write sys$output ""
$ write sys$output ""
$ write sys$output "with DECC$POSIX_COMPLIANT_PATHNAMES defines to 2"
$ write sys$output ""
$ define DECC$POSIX_COMPLIANT_PATHNAMES 2
$ run foo
$
$ deass DECC$POSIX_COMPLIANT_PATHNAMES
$
$ set prot=o:rewd foo.dir;
$ set prot=o:rewd [.foo]a.DIR;
$ set prot=o:rewd [.foo]aaa.DIR;
$ delete [.foo]a.DIR;
$ delete [.foo]aaa.DIR;
$ delete foo.DIR;
$ delete foo.obj;*
$ delete foo.exe;*
$
Then running this file gives:
$ @pb_pcp.com
without DECC$POSIX_COMPLIANT_PATHNAMES
stat("foo/a"): 0, errno:0
stat("foo/aaa"): 0, errno:0
stat("foo/a/"): 0, errno:0
stat("foo/aaa/"): 0, errno:0
with DECC$POSIX_COMPLIANT_PATHNAMES defines to 2
stat("foo/a"): -1, errno:2
stat("foo/aaa"): 0, errno:2
stat("foo/a/"): 0, errno:0
stat("foo/aaa/"): 0, errno:0
$