Browse Source

stdio: add general file management definitions

master
Lephenixnoir 8 months ago
parent
commit
6e42995388
Signed by: Lephenixnoir GPG Key ID: 1BBA026E13FC0495
  1. 14
      STATUS
  2. 37
      include/stdio.h
  3. 10
      include/target/gint/bits/types/FILE.h
  4. 5
      include/unistd.h

14
STATUS

@ -86,7 +86,8 @@ DONE: Function/symbol/macro is defined, builds, links, and is tested
7.18 <stdint.h> => GCC
7.19 <stdio.h>
! 7.19.1 Introduction: TODO
7.19.1 Introduction: TEST
TODO: Handle wide-oriented streams? (see notes)
! 7.19.4 Operations on files: TODO
! 7.19.5 File access functions: TODO
! 7.19.6 Formatted input/output functions: TODO
@ -182,3 +183,14 @@ What if we wanted to support more locales?
-> Fix the "TODO: locale: ..." messages wherever assumptions on the locale are
made in the code
-> Properly implement strcoll() and strxfrm()
# Supporting text and binary files (newline translation)
Because of 7.19.2%1,223 we don't need to support newline translation.
# Support wide-oriented streams
This requires all the wide-char functions but also updating fpos_t to be a
structure with at least some mbstate_t member (7.19.2§6).
I really don't want to do that. Use multi-byte functions with UTF-8.

37
include/stdio.h

@ -3,8 +3,45 @@
#include <stddef.h>
#include <stdarg.h>
/* Type of FILE handlers. */
#include <bits/types/FILE.h>
/* Type of positions within files. */
typedef size_t fpos_t;
/* Buffering modes. */
#define _IOFBF 0
#define _IOLBF 1
#define _IONBF 2
/* Some buffer size for file buffering. */
/* TODO: We might want a larger BUFSIZ than 256 on fx-CG 50. */
#define BUFSIZ 256
/* End-of-file marker. */
#define EOF ((int)(-1))
/* Number of files guaranteed can be opened simultaneously. */
/* TODO: FOPEN_MAX is BFile-specific, Vhex might have much larger limits. */
#define FOPEN_MAX 4
/* Recommended length of a filename. */
/* TODO: FILENAME_MAX = 128 is quite BFile-centric, Vhex might be different. */
#define FILENAME_MAX 128
/* Length a filename for tmpnam. */
#define L_tmpnam FILENAME_MAX
/* Seeking positions. */
#define SEEK_CUR 0
#define SEEK_END 1
#define SEEK_SET 2
/* Maximum number of unique filenames that tmpnam can generate. */
/* TODO: Set a useful value in TMP_MAX other than 16*16*16 */
#define TMP_MAX (16*16*16)
/* Standard input, output and error streams. */
extern FILE *stdin;
extern FILE *stdout;

10
include/target/gint/bits/types/FILE.h

@ -1,7 +1,17 @@
#ifndef __BITS_TYPES_FILE_H__
# define __BITS_TYPES_FILE_H__
#include <stddef.h>
typedef struct {
/* BFile handler */
int fd;
/* Current position in file */
size_t pos;
/* Buffering mode */
// TODO
/* Opening mode */
// TODO
} FILE;
#endif /*__BITS_TYPES_FILE_H__*/

5
include/unistd.h

@ -59,11 +59,6 @@ extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, off_t __offset);
*/
extern ssize_t pwrite (int __fd, const void *__buf, size_t __n, off_t __offset);
/* Values for the WHENCE argument to lseek. */
#define SEEK_SET 0 /* Seek from beginning of file. */
#define SEEK_CUR 1 /* Seek from current position. */
#define SEEK_END 2 /* Seek from end of file. */
/*
** Move FD's file position to OFFSET bytes from the beginning of the file
** (if WHENCE is SEEK_SET), the current position (if WHENCE is SEEK_CUR),

Loading…
Cancel
Save