You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ga...@apache.org on 2002/11/19 14:04:33 UTC

cvs commit: xml-xerces/c/src/xercesc/util/Platforms/OpenServer OpenServerPlatformUtils.cpp

gareth      2002/11/19 05:04:33

  Modified:    c/src/xercesc/util/Platforms/OpenServer
                        OpenServerPlatformUtils.cpp
  Log:
  Bug# 14661 Caldera implemented openFileToWrite and writeBufferToFile. Patch from Cameron Dorrat.
  
  Revision  Changes    Path
  1.4       +53 -1     xml-xerces/c/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
  
  Index: OpenServerPlatformUtils.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- OpenServerPlatformUtils.cpp	4 Nov 2002 15:13:01 -0000	1.3
  +++ OpenServerPlatformUtils.cpp	19 Nov 2002 13:04:32 -0000	1.4
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.4  2002/11/19 13:04:32  gareth
  + * Bug# 14661 Caldera implemented openFileToWrite and writeBufferToFile. Patch from Cameron Dorrat.
  + *
    * Revision 1.3  2002/11/04 15:13:01  tng
    * C++ Namespace Support.
    *
  @@ -271,6 +274,18 @@
       return retVal;
   }
   
  +FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
  +{
  +    const char* tmpFileName = XMLString::transcode(fileName);
  +    ArrayJanitor<char> janText((char*)tmpFileName);
  +    return fopen( tmpFileName , "wb" );
  +}
  +
  +FileHandle XMLPlatformUtils::openFileToWrite(const char* const fileName)
  +{
  +    return fopen( fileName , "wb" );
  +}
  +
   FileHandle XMLPlatformUtils::openStdInHandle()
   {
   	return (FileHandle)fdopen(dup(0), "rb");
  @@ -291,6 +306,41 @@
       return (unsigned int)noOfItemsRead;
   }
   
  +void
  +XMLPlatformUtils::writeBufferToFile( FileHandle     const  theFile
  +                                   , long                  toWrite
  +                                   , const XMLByte* const  toFlush)                                   
  +{
  +    if (!theFile        ||
  +        (toWrite <= 0 ) ||
  +        !toFlush         )
  +        return;
  +
  +    const XMLByte* tmpFlush = (const XMLByte*) toFlush;
  +    size_t bytesWritten = 0;
  +
  +    while (true)
  +    {
  +        bytesWritten=fwrite(tmpFlush, sizeof(XMLByte), toWrite, (FILE*)theFile);
  +
  +        if(ferror((FILE*)theFile))
  +        {
  +            ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotWriteToFile);
  +        }
  +
  +        if (bytesWritten < toWrite) //incomplete write
  +        {
  +            tmpFlush+=bytesWritten;
  +            toWrite-=bytesWritten;
  +            bytesWritten=0;
  +        }
  +        else
  +            return;
  +    }
  +
  +    return;
  +}
  +
   void XMLPlatformUtils::resetFile(FileHandle theFile)
   {
       if (fseek((FILE*)theFile, 0, SEEK_SET))
  @@ -312,7 +362,9 @@
       ArrayJanitor<char> janText(newSrc);
   
       // Use a local buffer that is big enough for the largest legal path
  -    char *absPath = new char[pathconf(newSrc, _PC_PATH_MAX)];
  +	 // Without the *3 we get exceptions with gcc on OpenServer 5.0.5/6 when 
  +	 // relative paths are passed in
  +    char *absPath = new char[pathconf(newSrc, _PC_PATH_MAX)*3];
       ArrayJanitor<char> janText2(absPath);
       // Get the absolute path
       char* retPath = realpath(newSrc, absPath);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org