Revision: 1211 http://trac.macosforge.org/projects/ruby/changeset/1211 Author: pthomson@apple.com Date: 2009-03-27 13:11:09 -0700 (Fri, 27 Mar 2009) Log Message: ----------- Put in calls to rb_last_status_set so that lrz can reimplement it. Modified Paths: -------------- MacRuby/branches/experimental/include/ruby/io.h MacRuby/branches/experimental/io.c Modified: MacRuby/branches/experimental/include/ruby/io.h =================================================================== --- MacRuby/branches/experimental/include/ruby/io.h 2009-03-27 19:40:37 UTC (rev 1210) +++ MacRuby/branches/experimental/include/ruby/io.h 2009-03-27 20:11:09 UTC (rev 1211) @@ -60,6 +60,16 @@ #define FMODE_TRUNC 0x00000800 #define FMODE_TEXTMODE 0x00001000 + +#ifndef SEEK_CUR +# define SEEK_SET 0 +# define SEEK_CUR 1 +# define SEEK_END 2 +#endif + +#define FMODE_SYNCWRITE (FMODE_SYNC|FMODE_WRITABLE) + + VALUE rb_io_taint_check(VALUE); NORETURN(void rb_eof_error(void)); Modified: MacRuby/branches/experimental/io.c =================================================================== --- MacRuby/branches/experimental/io.c 2009-03-27 19:40:37 UTC (rev 1210) +++ MacRuby/branches/experimental/io.c 2009-03-27 20:11:09 UTC (rev 1211) @@ -1,4 +1,4 @@ -/********************************************************************** + /********************************************************************** io.c - @@ -300,6 +300,33 @@ return convert_fmode_to_oflags(convert_mode_string_to_fmode(s)); } +static inline int +convert_oflags_to_fmode(int mode) +{ + int flags = 0; + + switch (mode & (O_RDONLY|O_WRONLY|O_RDWR)) { + case O_RDONLY: + flags = FMODE_READABLE; + break; + case O_WRONLY: + flags = FMODE_WRITABLE; + break; + case O_RDWR: + flags = FMODE_READWRITE; + break; + } + + if (mode & O_APPEND) { + flags |= FMODE_APPEND; + } + if (mode & O_CREAT) { + flags |= FMODE_CREATE; + } + + return flags; +} + void rb_eof_error(void) { @@ -363,42 +390,6 @@ || CFWriteStreamGetStatus(io_struct->writeStream) == kCFStreamStatusOpen); } -#define FMODE_PREP (1<<16) -#define IS_PREP_STDIO(f) ((f)->mode & FMODE_PREP) -#define PREP_STDIO_NAME(f) ((f)->path) - -static inline int -rb_io_modenum_flags(int mode) -{ - int flags = 0; - - switch (mode & (O_RDONLY|O_WRONLY|O_RDWR)) { - case O_RDONLY: - flags = FMODE_READABLE; - break; - case O_WRONLY: - flags = FMODE_WRITABLE; - break; - case O_RDWR: - flags = FMODE_READWRITE; - break; - } - - if (mode & O_APPEND) { - flags |= FMODE_APPEND; - } - if (mode & O_CREAT) { - flags |= FMODE_CREATE; - } -#ifdef O_BINARY - if (mode & O_BINARY) { - flags |= FMODE_BINMODE; - } -#endif - - return flags; -} - /* * call-seq: * IO.try_convert(obj) -> io or nil @@ -416,14 +407,6 @@ rb_notimplement(); } -#ifndef SEEK_CUR -# define SEEK_SET 0 -# define SEEK_CUR 1 -# define SEEK_END 2 -#endif - -#define FMODE_SYNCWRITE (FMODE_SYNC|FMODE_WRITABLE) - static VALUE io_alloc(VALUE klass, SEL sel) { @@ -485,8 +468,6 @@ io_struct->sync = mode & FMODE_SYNC; } -int macruby_pclose(FILE *iop); - static void io_struct_close(rb_io_t *io_struct, bool close_read, bool close_write) { @@ -497,10 +478,10 @@ CFWriteStreamClose(io_struct->writeStream); } if (io_struct->fp != NULL) { - const int status = macruby_pclose(io_struct->fp); - io_struct->fp = NULL; - // TODO find out the real pid instead of passing -1 - rb_last_status_set(status, -1); + const int status = macruby_pclose(io_struct->fp); + io_struct->fp = NULL; + rb_last_status_set(status, io_struct->pid); + io_struct->pid = -1; } } @@ -1785,7 +1766,7 @@ if (path != NULL && strcmp(path, "-") != 0) { klass = rb_cFile; } - return prep_io(fd, rb_io_modenum_flags(mode), klass); + return prep_io(fd, convert_oflags_to_fmode(mode), klass); } static VALUE
participants (1)
-
source_changes@macosforge.org