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]

Reply via email to