/* Flags for representing mode (see fopen()). Note these must fit the same
status field as the _IO?BF flags in <stdio.h> and the internal flags below.
*/
-#define _PDCLIB_FREAD 8u
+#define _PDCLIB_FREAD 8u
#define _PDCLIB_FWRITE 16u
#define _PDCLIB_FAPPEND 32u
#define _PDCLIB_FRW 64u
#define _PDCLIB_FBIN 128u
/* Internal flags, made to fit the same status field as the flags above. */
-#define _PDCLIB_WROTELAST 256u
-#define _PDCLIB_LIBBUFFER 512u
-#define _PDCLIB_VIRGINSTR 1024u
-#define _PDCLIB_ERRORFLAG 2048u
-#define _PDCLIB_EOFFLAG 4096u
+#define _PDCLIB_LIBBUFFER 512u
+#define _PDCLIB_VIRGINSTR 1024u
+#define _PDCLIB_ERRORFLAG 2048u
+#define _PDCLIB_EOFFLAG 4096u
+#define _PDCLIB_WIDESTREAM 8192u
+#define _PDCLIB_BYTESTREAM 16384u
struct _PDCLIB_file_t
{
_PDCLIB_size_t bufidx; /* index to point of action in buffer */
_PDCLIB_size_t bufend; /* index to end of pre-read buffer */
unsigned int status; /* misc. status bits */
+ char * filename; /* name used in fopen() / freopen() */
struct _PDCLIB_file_t * next; /* provisions for linked list handling */
};
/* Two helper functions used by strtol(), strtoul() and long long variants. */
const char * _PDCLIB_strtox_prelim( const char * p, char * sign, int * base );
-_PDCLIB_uintmax_t _PDCLIB_strtox_main( const char ** p, unsigned int base, _PDCLIB_uintmax_t error, _PDCLIB_uintmax_t limval, _PDCLIB_uintmax_t limdigit, char * sign );
+_PDCLIB_uintmax_t _PDCLIB_strtox_main( const char ** p, unsigned int base, _PDCLIB_uintmax_t error, _PDCLIB_uintmax_t limval, int limdigit, char * sign );
/* Digits arrays used by various integer conversion functions */
extern char _PDCLIB_digits[];
*/
const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status );
+/* Common denominator of puts() and fputs() */
+int _PDCLIB_puts( const char * s, const char * endl, struct _PDCLIB_file_t * stream );
+
/* Parsing any fopen() style filemode string into a number of flags. */
unsigned int _PDCLIB_filemode( const char * mode );
+
+/* Writing out unwritten buffers of a specific stream. A NULL parameter (as is
+ possible with standard fflush()) is not supported.
+ Return 0 if successful, EOF if error occured. Set error flag of stream and
+ errno as appropriate in case of error.
+*/
+_PDCLIB_size_t _PDCLIB_flushbuffer( struct _PDCLIB_file_t * stream, _PDCLIB_size_t written, int retries );
+