neilg 2004/04/06 17:28:06 Modified: c/src/xercesc/util/Platforms/OS390 OS390PlatformUtils.cpp Log: fix for file resolution problems on OS/390; thanks to Steve Dulin Revision Changes Path 1.18 +43 -20 xml-xerces/c/src/xercesc/util/Platforms/OS390/OS390PlatformUtils.cpp Index: OS390PlatformUtils.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Platforms/OS390/OS390PlatformUtils.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- OS390PlatformUtils.cpp 13 Jan 2004 16:34:21 -0000 1.17 +++ OS390PlatformUtils.cpp 7 Apr 2004 00:28:06 -0000 1.18 @@ -872,9 +872,9 @@ { // - // NOTE: THe path provided has always already been opened successfully, + // NOTE: The path provided has always already been opened successfully, // so we know that its not some pathological freaky path. It comes in - // in native format, and goes out as Unicode always + // in Unicode, and goes out as Unicode always // char* newSrc = XMLString::transcode(srcPath, manager); ArrayJanitor<char> janText(newSrc, manager); @@ -882,17 +882,38 @@ Path390 pathobj; pathobj.setPath(newSrc); - // Use a local buffer that is big enough for the largest legal path - char *absPath = (char*) manager->allocate((_POSIX_PATH_MAX+1) * sizeof(char));//new char[_POSIX_PATH_MAX]; - ArrayJanitor<char> janText2(absPath, manager); + // Check if this is a relative path that we care about .... + // If it is, then use getCurrentDirectory and append + // the relative part passed in to those results + if ( (pathobj.isRelative()) && + ( (pathobj.getPathType() == PATH390_HFS) || + (pathobj.getPathType() == PATH390_OTHER) ) ) + { + XMLCh* curDir = getCurrentDirectory(manager); + ArrayJanitor<XMLCh> janText1(curDir, manager); + + int curDirLen = XMLString::stringLen(curDir); + int srcPathLen = XMLString::stringLen(srcPath); + + XMLCh* fullPath = (XMLCh*) manager->allocate + ( + (curDirLen + srcPathLen + 2) * sizeof(XMLCh) + ); + + // Copy the current directory to the new buffer, then + // follow it by a slash, then add relative path after that. + XMLString::copyString(fullPath, curDir); + fullPath[curDirLen] = chForwardSlash; + XMLString::copyString(&fullPath[curDirLen +1], srcPath); + + // get rid of the redundant stuff + removeDotSlash(fullPath); + removeDotDotSlash(fullPath); + + return fullPath; + } - if ( (pathobj.getPathType() == PATH390_HFS) || (pathobj.getPathType() == PATH390_OTHER) ) { - //get the absolute path - if (getcwd(absPath, _POSIX_PATH_MAX) == NULL) { - ThrowXMLwithMemMgr(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName, manager); - } - return XMLString::transcode(absPath, manager); - } + // Just return what they sent in since it wasn't relative return XMLString::transcode(newSrc, manager); } @@ -940,14 +961,16 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager) { - /*** - * REVISIT: - * - * To be implemented later - ***/ + // Use a local buffer that is big enough for the largest legal path + char *absPath = (char*) manager->allocate((_POSIX_PATH_MAX+1) * sizeof(char)); + ArrayJanitor<char> janText2(absPath, manager); + if (getcwd(absPath, _POSIX_PATH_MAX) == NULL) + { + ThrowXMLwithMemMgr(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName, manager); + } + + return XMLString::transcode(absPath, manager); - XMLCh curDir[]={ chPeriod, chForwardSlash, chNull}; - return getFullPath(curDir, manager); } inline bool XMLPlatformUtils::isAnySlash(XMLCh c)
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]