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]

Reply via email to