]> pd.if.org Git - pdclib.old/blobdiff - internals/_PDCLIB_io.h
Add newline translationwq
[pdclib.old] / internals / _PDCLIB_io.h
index 78e747c0edcc1df81a8184ca7a74372f4ef90a5a..2df3ff5ca6dd1b31927a32abd8097938acef24d6 100644 (file)
@@ -14,7 +14,7 @@
 */\r
 #define _PDCLIB_FREAD     8u\r
 #define _PDCLIB_FWRITE   16u\r
-#define _PDCLIB_FAPPEND  32u \r
+#define _PDCLIB_FAPPEND  32u\r
 #define _PDCLIB_FRW      64u\r
 #define _PDCLIB_FBIN    128u\r
 \r
@@ -41,7 +41,7 @@ union _PDCLIB_fd
 #endif\r
     void *              pointer;\r
     _PDCLIB_uintptr_t   uval;\r
-    _PDCLIB_intptr_t    sval;     \r
+    _PDCLIB_intptr_t    sval;\r
 };\r
 \r
 /******************************************************************************/\r
@@ -206,21 +206,43 @@ static inline _PDCLIB_size_t _PDCLIB_getchars( char * out, _PDCLIB_size_t n,
     {\r
         while ( stream->bufidx != stream->bufend && i != n)\r
         {\r
-            c = (unsigned char)\r
-                ( out[ i++ ] = stream->buffer[ stream->bufidx++ ] );\r
+            c = (unsigned char) stream->buffer[ stream->bufidx++ ];\r
+#ifdef _PDCLIB_NEED_EOL_TRANSLATION\r
+            if ( !( stream->status & _PDCLIB_FBIN ) && c == '\r' )\r
+            {\r
+                if ( stream->bufidx == stream->bufend )\r
+                    break;\r
+\r
+                if ( stream->buffer[ stream->bufidx ] == '\n' )\r
+                {\r
+                    c = '\n';\r
+                    stream->bufidx++;\r
+                }\r
+            }\r
+#endif\r
+            out[ i++ ] = c;\r
+\r
             if( c == stopchar )\r
                 return i;\r
         }\r
 \r
-        if ( stream->bufidx == stream->bufend )\r
+        if ( i != n )\r
         {\r
             if( _PDCLIB_fillbuffer( stream ) == -1 )\r
             {\r
-                return i;\r
+                break;\r
             }\r
         }\r
     }\r
 \r
+#ifdef _PDCLIB_NEED_EOL_TRANSLATION\r
+    if ( i != n && stream->bufidx != stream->bufend )\r
+    {\r
+        // we must have EOF'd immediately after a \r\r
+        out[ i++ ] = stream->buffer[ stream->bufidx++ ];\r
+    }\r
+#endif\r
+\r
     return i;\r
 }\r
 \r