]> pd.if.org Git - pdclib.old/blobdiff - internals/_PDCLIB_io.h
PDCLIB-18: Add _PDCLIB_getchars to _PDCLIB_io.h. Change fread & fgets to go through...
[pdclib.old] / internals / _PDCLIB_io.h
index 829bb4586ed66781c2b2aca73f88f934651678a5..2ece56ce194b4ea3b0387f099770d5ef0a001142 100644 (file)
@@ -151,5 +151,40 @@ struct _PDCLIB_file_t
     struct _PDCLIB_file_t *   next;     /* Pointer to next struct (internal) */\r
 };\r
 \r
+static inline _PDCLIB_size_t _PDCLIB_getchars( char * out, _PDCLIB_size_t n,\r
+                                               int stopchar,\r
+                                               struct _PDCLIB_file_t * stream )\r
+{\r
+    _PDCLIB_size_t i = 0;\r
+    int c;\r
+    while ( stream->ungetidx > 0 && i != n )\r
+    {\r
+        c = (unsigned char) \r
+                ( out[ i++ ] = stream->ungetbuf[ --(stream->ungetidx) ] );\r
+        if( c == stopchar )\r
+            return i;\r
+    }\r
+\r
+    while ( i != n )\r
+    {\r
+        while ( stream->bufidx != stream->bufend && i != n) \r
+        {\r
+            c = (unsigned char) \r
+                ( out[ i++ ] = stream->buffer[ stream->bufidx++ ] );\r
+            if( c == stopchar )\r
+                return i;\r
+        }\r
+\r
+        if ( stream->bufidx == stream->bufend )\r
+        {\r
+            if( _PDCLIB_fillbuffer( stream ) == -1 )\r
+            {\r
+                return i;\r
+            }\r
+        }\r
+    }\r
+\r
+    return i;\r
+}\r
 \r
 #endif\r