[439] | 1 | /*
|
---|
| 2 | ** io.h - IO class
|
---|
| 3 | */
|
---|
| 4 |
|
---|
| 5 | #ifndef MRUBY_IO_H
|
---|
| 6 | #define MRUBY_IO_H
|
---|
| 7 |
|
---|
| 8 | #include <mruby.h>
|
---|
| 9 |
|
---|
| 10 | #ifdef MRB_DISABLE_STDIO
|
---|
| 11 | # error IO and File conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
|
---|
| 12 | #endif
|
---|
| 13 |
|
---|
| 14 | #if defined(__cplusplus)
|
---|
| 15 | extern "C" {
|
---|
| 16 | #endif
|
---|
| 17 |
|
---|
| 18 | #if defined(MRB_WITHOUT_IO_PREAD_PWRITE)
|
---|
| 19 | # undef MRB_WITH_IO_PREAD_PWRITE
|
---|
| 20 | #elif !defined(MRB_WITH_IO_PREAD_PWRITE)
|
---|
| 21 | # if defined(__unix__)
|
---|
| 22 | # define MRB_WITH_IO_PREAD_PWRITE
|
---|
| 23 | # endif
|
---|
| 24 | #endif
|
---|
| 25 |
|
---|
| 26 | struct mrb_io {
|
---|
| 27 | int fd; /* file descriptor, or -1 */
|
---|
| 28 | int fd2; /* file descriptor to write if it's different from fd, or -1 */
|
---|
| 29 | int pid; /* child's pid (for pipes) */
|
---|
| 30 | unsigned int readable:1,
|
---|
| 31 | writable:1,
|
---|
| 32 | sync:1,
|
---|
| 33 | is_socket:1;
|
---|
| 34 | };
|
---|
| 35 |
|
---|
| 36 | #define MRB_O_RDONLY 0x0000
|
---|
| 37 | #define MRB_O_WRONLY 0x0001
|
---|
| 38 | #define MRB_O_RDWR 0x0002
|
---|
| 39 | #define MRB_O_ACCMODE (MRB_O_RDONLY | MRB_O_WRONLY | MRB_O_RDWR)
|
---|
| 40 | #define MRB_O_NONBLOCK 0x0004
|
---|
| 41 | #define MRB_O_APPEND 0x0008
|
---|
| 42 | #define MRB_O_SYNC 0x0010
|
---|
| 43 | #define MRB_O_NOFOLLOW 0x0020
|
---|
| 44 | #define MRB_O_CREAT 0x0040
|
---|
| 45 | #define MRB_O_TRUNC 0x0080
|
---|
| 46 | #define MRB_O_EXCL 0x0100
|
---|
| 47 | #define MRB_O_NOCTTY 0x0200
|
---|
| 48 | #define MRB_O_DIRECT 0x0400
|
---|
| 49 | #define MRB_O_BINARY 0x0800
|
---|
| 50 | #define MRB_O_SHARE_DELETE 0x1000
|
---|
| 51 | #define MRB_O_TMPFILE 0x2000
|
---|
| 52 | #define MRB_O_NOATIME 0x4000
|
---|
| 53 | #define MRB_O_DSYNC 0x00008000 /* Ignored with MRB_INT16 and MRB_WITHOUT_FLOAT */
|
---|
| 54 | #define MRB_O_RSYNC 0x00010000 /* Ignored with MRB_INT16 and MRB_WITHOUT_FLOAT */
|
---|
| 55 |
|
---|
| 56 | #define MRB_O_RDONLY_P(f) ((mrb_bool)(((f) & MRB_O_ACCMODE) == MRB_O_RDONLY))
|
---|
| 57 | #define MRB_O_WRONLY_P(f) ((mrb_bool)(((f) & MRB_O_ACCMODE) == MRB_O_WRONLY))
|
---|
| 58 | #define MRB_O_RDWR_P(f) ((mrb_bool)(((f) & MRB_O_ACCMODE) == MRB_O_RDWR))
|
---|
| 59 | #define MRB_O_READABLE_P(f) ((mrb_bool)((((f) & MRB_O_ACCMODE) | 2) == 2))
|
---|
| 60 | #define MRB_O_WRITABLE_P(f) ((mrb_bool)(((((f) & MRB_O_ACCMODE) + 1) & 2) == 2))
|
---|
| 61 |
|
---|
| 62 | #define E_IO_ERROR (mrb_class_get(mrb, "IOError"))
|
---|
| 63 | #define E_EOF_ERROR (mrb_class_get(mrb, "EOFError"))
|
---|
| 64 |
|
---|
| 65 | int mrb_io_fileno(mrb_state *mrb, mrb_value io);
|
---|
| 66 |
|
---|
| 67 | #if defined(__cplusplus)
|
---|
| 68 | } /* extern "C" { */
|
---|
| 69 | #endif
|
---|
| 70 | #endif /* MRUBY_IO_H */
|
---|