Added debug messages.
authorHartmut Birr <osexpert@googlemail.com>
Mon, 1 Apr 2002 21:52:45 +0000 (21:52 +0000)
committerHartmut Birr <osexpert@googlemail.com>
Mon, 1 Apr 2002 21:52:45 +0000 (21:52 +0000)
Added LN to CR/LN translation for text files.

svn path=/trunk/; revision=2799

reactos/lib/msvcrt/io/write.c

index b7a3d8e..299d304 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * COPYRIGHT:   See COPYING in the top level directory
  * PROJECT:     ReactOS system libraries
- * FILE:        lib/crtdll/io/write.c
+ * FILE:        lib/msvcrt/io/write.c
  * PURPOSE:     Writes to a file
  * PROGRAMER:   Boudewijn Dekker
  * UPDATE HISTORY:
@@ -9,15 +9,80 @@
  */
 #include <windows.h>
 #include <msvcrt/io.h>
+#include <msvcrt/internal/file.h>
 
+#define NDEBUG
+#include <msvcrt/msvcrtdbg.h>
+
+#define BUFSIZE        4096
 
 size_t _write(int _fd, const void *_buf, size_t _nbyte)
 {
-   DWORD _wbyte;
-   
-   if (!WriteFile(_get_osfhandle(_fd),_buf,_nbyte,&_wbyte,NULL))
+   char *tmp, *in, *out;
+   int count, result;
+   DWORD wbyte;
+
+   DPRINT("_write(fd %d, buf %x, nbyte %d)\n", _fd, _buf, _nbyte);
+   if (__fileno_getmode(_fd) & O_TEXT)
+   {
+      result = _nbyte; 
+      tmp = (char*) malloc(BUFSIZE);
+      if (tmp == NULL)
+      {
+        return -1;
+      }
+      count = BUFSIZE;
+      out = tmp;
+      in = (char*) _buf;
+      while (_nbyte--)
+      {
+         if (*in == 0x0a)
+        {
+           *out++ = 0x0d;
+           count--;
+           if (count == 0)
+           {
+               if (!WriteFile(_get_osfhandle(_fd), tmp, BUFSIZE, &wbyte, NULL))
+               {
+                  result = -1;
+                  break;
+               }
+               if (wbyte < BUFSIZE)
+               {
+                  result = in - (char*)_buf;
+                  break;
+               }
+               count = BUFSIZE;
+               out = tmp;
+           }
+        }
+        *out++ = *in++;
+        count--;
+        if (count == 0 || _nbyte == 0)
+        {
+           if (!WriteFile(_get_osfhandle(_fd), tmp, BUFSIZE - count, &wbyte, NULL))
+           {
+               result = -1; 
+               break;
+           }
+           if (wbyte < BUFSIZE - count)
+           {
+               result = in - (char*)_buf;
+               break;
+           }
+           count = BUFSIZE;
+           out = tmp;
+        }
+      }
+      free(tmp);
+      return result;
+   }
+   else
    {
-      return -1;
+      if(!WriteFile(_get_osfhandle(_fd), _buf, _nbyte, &wbyte, NULL))
+      {
+         return -1;
+      }
+      return wbyte;
    }
-   return (size_t)_wbyte;
 }