summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTomoyuki Sahara <[email protected]>2013-09-30 11:18:22 +0900
committerTomoyuki Sahara <[email protected]>2013-09-30 11:18:22 +0900
commit97899a6922a016d4e488f929f009db78d46d7b1d (patch)
tree846e156096024a2480fdab2006fb55769a5d6e51
parentadb3bd669831ed1c04708076072313a209e2d848 (diff)
downloadmruby-97899a6922a016d4e488f929f009db78d46d7b1d.tar.gz
mruby-97899a6922a016d4e488f929f009db78d46d7b1d.zip
style
-rw-r--r--src/io.c64
1 files changed, 31 insertions, 33 deletions
diff --git a/src/io.c b/src/io.c
index d59d95b97..e156733dd 100644
--- a/src/io.c
+++ b/src/io.c
@@ -162,9 +162,9 @@ mrb_io_alloc(mrb_state *mrb)
struct mrb_io *fptr;
fptr = (struct mrb_io *)mrb_malloc(mrb, sizeof(struct mrb_io));
- fptr->fd = -1;
- fptr->fd2 = -1;
- fptr->pid = 0;
+ fptr->fd = -1;
+ fptr->fd2 = -1;
+ fptr->pid = 0;
return fptr;
}
@@ -188,7 +188,7 @@ io_open(mrb_state *mrb, mrb_value path, int flags, int perm)
mrb_value
mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
{
- mrb_value cmd, io;
+ mrb_value cmd, io, result;
mrb_value mode = mrb_str_new_cstr(mrb, "r");
mrb_value opt = mrb_hash_new(mrb);
@@ -224,6 +224,7 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
fflush(stderr);
}
+ result = mrb_nil_value();
switch (pid = fork()) {
case 0: /* child */
if (flags & FMODE_READABLE) {
@@ -240,7 +241,6 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
close(pw[0]);
}
}
-
if (doexec) {
for (fd = 3; fd < NOFILE; fd++) {
close(fd);
@@ -249,37 +249,36 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
mrb_raisef(mrb, E_IO_ERROR, "command not found: %s", pname);
_exit(127);
}
- return mrb_nil_value();
+ result = mrb_nil_value();
+ break;
+
default: /* parent */
- if (pid < 0) {
- mrb_sys_fail(mrb, "pipe_open failed.");
- return mrb_nil_value();
+ if ((flags & FMODE_READABLE) && (flags & FMODE_WRITABLE)) {
+ close(pr[1]);
+ fd = pr[0];
+ close(pw[0]);
+ write_fd = pw[1];
+ } else if (flags & FMODE_READABLE) {
+ close(pr[1]);
+ fd = pr[0];
} else {
- if ((flags & FMODE_READABLE) && (flags & FMODE_WRITABLE)) {
- close(pr[1]);
- fd = pr[0];
- close(pw[0]);
- write_fd = pw[1];
- } else if (flags & FMODE_READABLE) {
- close(pr[1]);
- fd = pr[0];
- } else {
- close(pw[0]);
- fd = pw[1];
- }
+ close(pw[0]);
+ fd = pw[1];
+ }
- mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
- mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@pos"), mrb_fixnum_value(0));
+ mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
+ mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@pos"), mrb_fixnum_value(0));
- fptr = mrb_io_alloc(mrb);
- fptr->fd = fd;
- fptr->fd2 = write_fd;
- fptr->pid = pid;
+ fptr = mrb_io_alloc(mrb);
+ fptr->fd = fd;
+ fptr->fd2 = write_fd;
+ fptr->pid = pid;
+
+ DATA_TYPE(io) = &mrb_io_type;
+ DATA_PTR(io) = fptr;
+ result = io;
+ break;
- DATA_TYPE(io) = &mrb_io_type;
- DATA_PTR(io) = fptr;
- return io;
- }
case -1: /* error */
saved_errno = errno;
if (flags & FMODE_READABLE) {
@@ -294,8 +293,7 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
mrb_sys_fail(mrb, "pipe_open failed.");
break;
}
-
- return mrb_nil_value();
+ return result;
}
mrb_value