FileManagers: getFullPath Posix & Win32 implementations are not replaceable
----------------------------------------------------------------------------
Key: XERCESC-1807
URL: https://issues.apache.org/jira/browse/XERCESC-1807
Project: Xerces-C++
Issue Type: Bug
Components: Utilities
Affects Versions: Nightly build (please specify the date), 2.7.0
Environment: Solaris 5.9 & 5.10, Windows XP 2002 SP2
Reporter: Aleksandr Vinokurov
Simple examples with code copied from the WindowsFileMgr.cpp (rev. 556533) &
PosixFileMgr.cpp (rev. 471747) from FileManagers directory (rev. 556533)
confirm different operation of the code used to be an equal platform-dependant
realization of one functionality.
Win32 example:
>-----------------<cut>-------------------<
int main(int argc, char ** argv) {
if (argc == 1) {
return 1;
}
#define PATH_MAX 1024
char buf[PATH_MAX + 1];
char* namePart = 0;
if (!::GetFullPathNameA((LPCSTR)argv[1], PATH_MAX, (LPSTR)&buf[0],
(LPSTR*)&namePart)) {
cerr << "GetFullPathNameA failed" << endl;
return 2;
}
cout << buf << endl;
return 0;
}
>-----------------<cut>-------------------<
Posix example:
>-----------------<cut>-------------------<
int main(int argc, char ** argv) {
if (argc == 1) {
return 1;
}
char buf[PATH_MAX + 1];
char *retPath = realpath(argv[1], &buf[0]);
if (!retPath) {
cerr << "realpath failed with errno=" << errno << endl;
return 2;
}
cout << retPath << endl;
return 0;
}
>-----------------<cut>-------------------<
Run log on Windows:
>-----------------<cut>-------------------<
C:\TEMP>dir /s /b
C:\TEMP\a.exe
C:\TEMP\log.txt
C:\TEMP\run.bat
C:\TEMP>a a
C:\TEMP\a
C:\TEMP>a xxxxxxx
C:\TEMP\xxxxxxx
C:\TEMP>a ../
C:\
>-----------------<cut>-------------------<
Run log on Solaris:
>-----------------<cut>-------------------<
ls -1
Makefile
a.out
./a.out a.out
/var/tmp/examples/a.out
./a.out xxxxxx
realpath failed with errno=2
gmake: [all] Error 2 (ignored)
./a.out ../
/var/tmp
>-----------------<cut>-------------------<
As you can see GetFullPathNameA does not fail on absent file while realpath
does.
For now it is a really mess when using EntityResolver in XalanC
XalanTransformer, as it calls getFullPath before calling the actual
entityResolver method and catches up an exception if realpath can't find the
file. My problem seems to be shared between Xerces-C++ and XalanC, but IMHO the
differencies in getFullPath operations is prior.
run.bat:
>-----------------<cut>-------------------<
dir /s /b
a a
a xxxxxxx
a ../
>-----------------<cut>-------------------<
Makefile:
>-----------------<cut>-------------------<
all:
ls -1
-./a.out a.out
-./a.out xxxxxx
-./a.out ../
>-----------------<cut>-------------------<
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]