]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Function unix2dos
authorstv <stv@opencascade.com>
Wed, 6 Sep 2006 07:41:30 +0000 (07:41 +0000)
committerstv <stv@opencascade.com>
Wed, 6 Sep 2006 07:41:30 +0000 (07:41 +0000)
src/Qtx/Qtx.cxx
src/Qtx/Qtx.h

index ac512c146e18587c61d7d7875644b79cc9d2286e..8201c34d24478638f63ce1d602b173ac0d82cabf 100755 (executable)
@@ -414,7 +414,7 @@ QString Qtx::addSlash( const QString& path )
 
 /*!
        Name: dos2unix [static public]
-       Desc: Convert text file. Replace symbols "LF/CR" by symbol "LF".
+       Desc: Convert text file. Replace symbols "CR/LF" by symbol "LF".
 */
 bool Qtx::dos2unix( const QString& absName )
 {
@@ -482,6 +482,65 @@ bool Qtx::dos2unix( const QString& absName )
   return QDir().rename( QString( temp ), absName );
 }
 
+/*!
+       Name: unix2dos [static public]
+       Desc: Convert text file. Replace symbol "LF" by symbols "CR/LF".
+*/
+bool Qtx::unix2dos( const QString& absName )
+{
+  FILE* src = ::fopen( absName, "rb" );
+  if ( !src )
+               return false;
+
+  /* we'll use temporary file */
+  char temp[512] = { '\0' };
+  QString dir = Qtx::dir( absName );
+  FILE* tgt = ::fopen( strcpy( temp, ::tempnam( dir, "__x" ) ), "wb" );
+  if ( !tgt )
+               return false;
+
+  /* temp -> result of conversion */
+  const char CR = 0x0d;
+  const char LF = 0x0a;
+  bool prefCR = false;
+
+  while( true )
+  {
+    int  outcnt = 0;
+    char inbuf[512], outbuf[1024];
+
+    /* convert buffer */
+    int nbread = ::fread( inbuf, 1, sizeof( inbuf ), src );
+    for ( int incnt = 0; incnt < nbread; incnt++  )
+    {
+      if ( inbuf[incnt] == LF && !prefCR )
+        outbuf[outcnt++] = CR;
+      outbuf[outcnt++] = inbuf[incnt];
+      prefCR = inbuf[incnt] == CR;
+      }
+
+    /* write converted buffer to temp file */
+    int nbwri = ::fwrite( outbuf, 1, outcnt, tgt );
+    if ( nbwri != outcnt )
+    {
+      ::fclose( src );
+                       ::fclose( tgt );
+      QFile::remove( QString( temp ) );
+      return false;
+    }
+    if ( nbread != sizeof( inbuf ) )
+      break;              /* converted ok */
+  }
+  ::fclose( src );
+       ::fclose( tgt );
+
+  /* rename temp -> src */
+  if ( !QFile::remove( absName ) )
+    return false;
+
+  return QDir().rename( QString( temp ), absName );
+}
+
 /*!
        Name: rgbSet [static public]
        Desc: Pack the specified color into one integer RGB set.
index 45933d112ade47438dbc0847cf003b38f5c77f20..864441bede08fd83ecfa5f5df349279eb997554f 100755 (executable)
@@ -119,6 +119,7 @@ public:
   static bool    mkDir( const QString& );
   static bool    rmDir( const QString& );
   static bool    dos2unix( const QString& );
+  static bool    unix2dos( const QString& );
   static QString addSlash( const QString& );
 
   static int     rgbSet( const QColor& );