summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2011-03-17 00:44:57 +0900
committerAkira TAGOH <akira@tagoh.org>2011-03-17 00:44:57 +0900
commitaffd70f95ee0b2e35060b433aceccb6ff4b327b2 (patch)
tree32fe71ff68b28059a7eb12fe29f1d65a197f3e21
parent21ac0e34188e4e624a683bef818e165c9f187ad4 (diff)
dup fd for stdin/out/err
-rw-r--r--hieroglyph/hgfile.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/hieroglyph/hgfile.c b/hieroglyph/hgfile.c
index 4947cf7..cc23df5 100644
--- a/hieroglyph/hgfile.c
+++ b/hieroglyph/hgfile.c
@@ -48,7 +48,7 @@ typedef struct _hg_file_io_buffered_data_t {
static hg_file_vtable_t __hg_file_io_stdin_vtable = {
.open = _hg_file_io_real_stdin_open,
- .close = _hg_file_io_real_no_close,
+ .close = _hg_file_io_real_file_close,
.read = _hg_file_io_real_file_read,
.write = _hg_file_io_real_file_write,
.flush = _hg_file_io_real_file_flush,
@@ -58,7 +58,7 @@ static hg_file_vtable_t __hg_file_io_stdin_vtable = {
};
static hg_file_vtable_t __hg_file_io_stdout_vtable = {
.open = _hg_file_io_real_stdout_open,
- .close = _hg_file_io_real_no_close,
+ .close = _hg_file_io_real_file_close,
.read = _hg_file_io_real_file_read,
.write = _hg_file_io_real_file_write,
.flush = _hg_file_io_real_file_flush,
@@ -68,7 +68,7 @@ static hg_file_vtable_t __hg_file_io_stdout_vtable = {
};
static hg_file_vtable_t __hg_file_io_stderr_vtable = {
.open = _hg_file_io_real_stderr_open,
- .close = _hg_file_io_real_no_close,
+ .close = _hg_file_io_real_file_close,
.read = _hg_file_io_real_file_read,
.write = _hg_file_io_real_file_write,
.flush = _hg_file_io_real_file_flush,
@@ -298,7 +298,9 @@ _hg_file_io_real_stdin_open(hg_file_t *file,
memset(data, 0, sizeof (hg_file_io_data_t));
data->self = qdata;
}
- data->fd = 0;
+ data->fd = dup(STDIN_FILENO);
+ if (data->fd == -1)
+ goto exception;
data->mmapped_buffer = NULL;
file->user_data = data;
@@ -341,7 +343,9 @@ _hg_file_io_real_stdout_open(hg_file_t *file,
memset(data, 0, sizeof (hg_file_io_data_t));
data->self = qdata;
}
- data->fd = 1;
+ data->fd = dup(STDOUT_FILENO);
+ if (data->fd == -1)
+ goto exception;
data->mmapped_buffer = NULL;
file->user_data = data;
@@ -384,7 +388,9 @@ _hg_file_io_real_stderr_open(hg_file_t *file,
memset(data, 0, sizeof (hg_file_io_data_t));
data->self = qdata;
}
- data->fd = 2;
+ data->fd = dup(STDERR_FILENO);
+ if (data->fd == -1)
+ goto exception;
data->mmapped_buffer = NULL;
file->user_data = data;
@@ -398,13 +404,6 @@ _hg_file_io_real_stderr_open(hg_file_t *file,
return FALSE;
}
-static void
-_hg_file_io_real_no_close(hg_file_t *file,
- hg_pointer_t user_data)
-{
- file->is_closed = TRUE;
-}
-
static hg_bool_t
_hg_file_io_real_file_open(hg_file_t *file,
hg_pointer_t user_data)