dmitryh     2004/05/26 10:39:21

  Modified:    c/Tests  Makefile.in
               c/Tests/Harness FileUtility.cpp
               c/src/xalanc/PlatformSupport DirectoryEnumerator.hpp
  Log:
  Patch for  Bugzilla 24630  -  Porting Conf executable to Unix platforms
  
  Revision  Changes    Path
  1.8       +1 -1      xml-xalan/c/Tests/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/Tests/Makefile.in,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Makefile.in       6 Apr 2004 15:08:45 -0000       1.7
  +++ Makefile.in       26 May 2004 17:39:20 -0000      1.8
  @@ -48,7 +48,7 @@
   
   all: Tests
   
  -tests : ThreadTest
  +tests : ThreadTest Conf
   
   Tests:   ThreadTest Conf
   
  
  
  
  1.58      +46 -6     xml-xalan/c/Tests/Harness/FileUtility.cpp
  
  Index: FileUtility.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/Tests/Harness/FileUtility.cpp,v
  retrieving revision 1.57
  retrieving revision 1.58
  diff -u -r1.57 -r1.58
  --- FileUtility.cpp   14 Apr 2004 02:04:01 -0000      1.57
  +++ FileUtility.cpp   26 May 2004 17:39:20 -0000      1.58
  @@ -38,7 +38,8 @@
   #define DIR_MODE_BITS 509
   #include <dirent.h>
   #include <unistd.h>
  -extern "C" int mkdir(const char*, mode_t mode);
  +
  +#include <sys/stat.h>
   #endif
   
   
  @@ -420,6 +421,9 @@
               const XalanDOMString&   relDir,
               bool                    useDirPrefix)
   {
  +     char buffer3[PATH_MAX];
  +    getcwd(buffer3, PATH_MAX);
  +
       const XalanDOMString    searchSuffix(XALAN_STATIC_UCODE_STRING("*.xsl"));
       XalanDOMString  searchSpecification;
   
  @@ -439,6 +443,8 @@
       FileNameVectorType  theFiles;
       theEnumerator(searchSpecification, theFiles);
   
  +     chdir(buffer3);
  +
       return theFiles;
   }
   
  @@ -450,11 +456,16 @@
   FileUtility::FileNameVectorType
   FileUtility::getDirectoryNames(const XalanDOMString&        rootDirectory)
   {
  +     char buffer2[PATH_MAX];
  +     getcwd(buffer2, PATH_MAX);
  +
       const XalanDOMString    dirSpec(XALAN_STATIC_UCODE_STRING("*"));
   
       DirectoryEnumeratorFunctor<FileNameVectorType, XalanDOMString, 
DirectoryFilterPredicate> theEnumerator;
       FileNameVectorType  theFiles;
       theEnumerator(XalanDOMString(rootDirectory), XalanDOMString(dirSpec), 
theFiles);
  +     
  +     chdir(buffer2);
   
       return theFiles;
   }
  @@ -986,13 +997,14 @@
                   data.actual = XalanDOMString("<![CDATA[") + 
XalanDOMString(rline) + XalanDOMString("]]>");
                   data.currentNode = XalanDOMString("Line: ") + 
XalanDOMString(temp);
                   data.fail += 1;
  +                     fclose(result);         fclose(gold);
                   return false;
               }
           }
   
           lineNum += 1;
       }
  -
  +                     fclose(result);         fclose(gold);
       return true;
   }
   
  @@ -1842,12 +1854,36 @@
       XalanDOMString paramValue;
       bool    fileStatus;
   
  +#if defined(AIX) || defined(SOLARIS) || defined(LINUX) || defined(HPUX)
  +
  +     bool    pathStatus;
  +     CharVectorType     withPath;
  +     TranscodeToLocalCodePage(resultsFile, withPath, false);
  +     if (withPath[0] == '/')
  +             pathStatus=true;
  +     else
  +             pathStatus=false;
  +     
  +     char buffer5[PATH_MAX];
  +     XalanDOMString resultPath= XalanDOMString(getcwd(buffer5, PATH_MAX));
  +     append(resultPath, s_pathSep);
  +#endif
  +     
  +
       // Pass the results .xml file as a parameter to the stylesheet.  It must 
be wrapped in single
       // quotes so that it is not considered an expression.
       //
  -    assign(paramValue, XalanDOMString("'"));
  -    append(paramValue, resultsFile);
  -    append(paramValue, XalanDOMString("'"));
  +  #if defined (AIX) || defined(SOLARIS) || defined(LINUX) || defined(HPUX)
  +     assign(paramValue, XalanDOMString("\'"));
  +     if ( !pathStatus )
  +             append(paramValue, resultPath);
  +     append(paramValue, resultsFile);
  +     append(paramValue, XalanDOMString("\'"));
  +  #else      
  +     assign(paramValue, XalanDOMString("'"));
  +     append(paramValue, resultsFile);
  +     append(paramValue, XalanDOMString("'"));
  +  #endif
   
       // Set the parameter
       //
  @@ -1882,7 +1918,11 @@
   
       if (result == 0)
       {
  -        system(c_str(TranscodeToLocalCodePage(theHTMLFile)));
  +     #if defined(_MSC_VER)
  +             system(c_str(TranscodeToLocalCodePage(theHTMLFile)));
  +     #else
  +             cout << "The HTML output: " << theHTMLFile << " was created" << 
endl;
  +     #endif
       }
       else 
       {
  
  
  
  1.9       +97 -13    
xml-xalan/c/src/xalanc/PlatformSupport/DirectoryEnumerator.hpp
  
  Index: DirectoryEnumerator.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/xalanc/PlatformSupport/DirectoryEnumerator.hpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- DirectoryEnumerator.hpp   6 Apr 2004 15:08:45 -0000       1.8
  +++ DirectoryEnumerator.hpp   26 May 2004 17:39:21 -0000      1.9
  @@ -26,7 +26,13 @@
   #if defined(_MSC_VER)
   #include <io.h>
   #else
  +#include <unistd.h>
   #include <dirent.h>
  +#include <sys/stat.h>
  +#include <errno.h>
  +
  +extern int   errno;
  +
   #endif
   
   
  @@ -35,7 +41,7 @@
   #include <iterator>
   
   
  -
  +#include <xalanc/PlatformSupport/XalanFileOutputStream.hpp>
   #include <xalanc/PlatformSupport/DOMStringHelper.hpp>
   #include <xalanc/PlatformSupport/XalanUnicode.hpp>
   
  @@ -137,8 +143,30 @@
         */
        bool isDirectory() const
        {
  -#if defined(AIX) || defined(HPUX) || defined(SOLARIS) || defined(OS390) || 
defined(OS400) || defined(TRU64)  || defined(CYGWIN)
  +#if defined(OS390) || defined(OS400) || defined(TRU64)
                return false;
  +
  +#elif defined(AIX) || defined(SOLARIS) || defined(LINUX) || defined(HPUX) || 
defined(CYGWIN)
  +
  +     struct  stat stat_Info;
  +     int     retCode = stat (d_name, &stat_Info);
  + 
  +     if ( retCode == -1 )
  +     {
  +             typedef 
XalanFileOutputStream::XalanFileOutputStreamOpenException 
XalanStatDirectoryException;
  +             throw   XalanStatDirectoryException( XalanDOMString(d_name), 
errno );
  +     }
  +
  +     if ( S_ISDIR(stat_Info.st_mode) == 1 )
  +     {   
  +             return true;
  +     }
  +     else 
  +     {   
  +             return false;
  +     }
  +
  +
   #else                
                if (d_type == DT_DIR || d_type == DT_UNKNOWN)
                {
  @@ -154,7 +182,7 @@
        bool
        isSelfOrParent() const
        {
  -#if defined(AIX) || defined(HPUX) || defined(SOLARIS) || defined(OS390) || 
defined(OS400) || defined(TRU64)
  +#if defined(OS390) || defined(OS400) || defined(TRU64)
                return false;
   #else                
                if (isDirectory() == false)
  @@ -240,8 +268,14 @@
   {
   #if defined(_MSC_VER)
        FindFileStruct          theFindData;
  +     
  +     #ifdef _WIN64
  +             typedef intptr_t        theHandleType;
  +     #else
  +             typedef long    theHandleType;
  +     #endif
   
  -     long    theSearchHandle = 
_wfindfirst(const_cast<wchar_t*>(theConversionFunction(theFullSearchSpec)),
  +     theHandleType   theSearchHandle = 
_wfindfirst(const_cast<wchar_t*>(theConversionFunction(theFullSearchSpec)),
                                                                                
  &theFindData);
   
        if (theSearchHandle != -1)
  @@ -269,36 +303,67 @@
                _findclose(theSearchHandle);
        }
   
  -     
  -#elif defined(LINUX)
  +
  +#elif defined(AIX) || defined(SOLARIS) || defined(LINUX) || defined(HPUX) || 
defined(CYGWIN) 
   
        CharVectorType  theTargetVector;
   
        TranscodeToLocalCodePage(theFullSearchSpec, theTargetVector, false);
   
        const CharVectorType::size_type         theSize = 
theTargetVector.size();
  +     int  indexSuffix=0, indexName=0;
  +     bool target_Dir = false; 
   
        if (theSize > 0)
        {
                if (theTargetVector.back() == '*')
                {
  +                     target_Dir = true;
                        theTargetVector.pop_back();
   
                        if (theSize == 1)
                        {
                                theTargetVector.push_back('.');
                        }
  +             
                }
  +             else
  +        {
  +                     target_Dir = false;
  +
  +                     while(theTargetVector.back() != '*')
  +                     {
  +                             theTargetVector.pop_back();
  +                             indexSuffix++;
  +                     }
  +
  +                     theTargetVector.pop_back();
  +                     while(theTargetVector.back() != '/')
  +                     { 
  +                             theTargetVector.pop_back();
  +                             indexName++;
  +                     }
  +             }      
   
                theTargetVector.push_back('\0');
   
                const char* const       theSpec = c_str(theTargetVector);
                assert(theSpec != 0);
  +             
  +             XalanDOMString          theName;
  +             XalanDOMString          theSuffix;
  +             if ( !target_Dir )
  +             {
  +                     int lenSpec = strlen(theSpec); 
  +                     theName = theFullSearchSpec.substr(lenSpec, indexName); 
  +                     theSuffix = 
theFullSearchSpec.substr(lenSpec+indexName+1, indexSuffix);
  +             }
   
                DIR* const      theDirectory = opendir(theSpec);
   
                if (theDirectory != 0)
                {
  +                     chdir(theSpec);
                        try
                        {
                                const FindFileStruct*   theEntry =
  @@ -306,22 +371,41 @@
        
                                while(theEntry != 0)
                                {
  -                                     if ((fIncludeSelfAndParent == true || 
theEntry->isSelfOrParent() == false) &&
  -                                             theFilterPredicate(*theEntry) 
== true)
  +                                     if ((fIncludeSelfAndParent == true || 
theEntry->isSelfOrParent() == false))
                                        {
  -                                             *theOutputIterator = 
StringType(theEntry->getName());
  +                                             if 
(theFilterPredicate(*theEntry) == true)
  +                                             {
  +                                                     if( target_Dir )
  +                                                     {
  +                                                             
*theOutputIterator = StringType(theEntry->getName());
  +                                                     }
  +                                                     else
  +                                                     {
  +                                                             XalanDOMString  
Getname = StringType(theEntry->getName());
  +                                                             int     Check_1 
= Getname.compare(theName);
  +                                                             XalanDOMString  
GetnameSuffix = Getname.substr(length(Getname)-indexSuffix, indexSuffix);       
     
  +                                                             int Check_2 = 
GetnameSuffix.compare(theSuffix);
  +                                                             if ( Check_1 == 
1 && (!Check_2) )
  +                                                             {
  +                                                                     
*theOutputIterator = Getname;
  +                                                             }
  +                                                     }
  +                                             }
                                        }
  -
                                        theEntry = 
(FindFileStruct*)readdir(theDirectory);
  -                             }
  -                     }
  +                             } //while
  +                     }//try
  +
                        catch(...)
                        {
                                closedir(theDirectory);
   
                                throw;
                        }
  -
  +                     if( target_Dir )
  +                           chdir("..");
  +                         else
  +                           chdir("../..");
                        closedir(theDirectory);
                }
        }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to