* Configuration Options
*/
#ifndef _STDIO_INT_H
-# define _STDIO_INT_H
+#define _STDIO_INT_H
+
+#include <sys/types.h>
+#include <stddef.h>
// === CONSTANTS ===
-#define FILE_FLAG_MODE_MASK 0x07
-#define FILE_FLAG_MODE_READ 0x01
-#define FILE_FLAG_MODE_WRITE 0x02
-#define FILE_FLAG_MODE_EXEC 0x03
-#define FILE_FLAG_MODE_APPEND 0x04
-#define FILE_FLAG_M_EXT 0x10
+#define FILE_FLAG_MODE_READ 0x0001
+#define FILE_FLAG_MODE_WRITE 0x0002
+#define FILE_FLAG_MODE_EXEC 0x0003
+#define FILE_FLAG_MODE_APPEND 0x0004
+#define FILE_FLAG_MODE_MASK 0x0007
+
+#define FILE_FLAG_M_EXT 0x0010
+#define FILE_FLAG_M_BINARY 0x0020
+
+#define FILE_FLAG_EOF 0x0100
+#define FILE_FLAG_LINEBUFFERED 0x1000 // Flush when '\n' encountered
+
+#define FILE_FLAG_ALLOC 0x8000 // Internal 'is used' flag
+
+#define _GetFileMode(fp) ((fp)->Flags & FILE_FLAG_MODE_MASK)
// === TYPES ===
struct sFILE {
- int FD;
int Flags;
+ int FD;
+ off_t Pos;
+
#if DEBUG_BUILD
- char *FileName;
+ char *FileName; // heap
#endif
- #if STDIO_LOCAL_BUFFER
+ off_t BufferOfs; // File offset of first byte in buffer
char *Buffer;
- Uint64 BufferStart;
- int BufferSize;
- #endif
+ size_t BufferPos; // First unused byte in the buffer (read/write pos essentially)
+ size_t BufferSpace; // Number of bytes allocated in \a Buffer
};
#endif