[macruby-changes] [985] MacRuby/branches/experimental
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 18 12:36:13 PDT 2009
Revision: 985
http://trac.macosforge.org/projects/ruby/changeset/985
Author: lsansonetti at apple.com
Date: 2009-03-18 12:36:13 -0700 (Wed, 18 Mar 2009)
Log Message:
-----------
implemented #sync and #sync= (not used yet) + fixed some indentation
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-18 19:35:34 UTC (rev 984)
+++ MacRuby/branches/experimental/include/ruby/io.h 2009-03-18 19:36:13 UTC (rev 985)
@@ -33,6 +33,7 @@
pid_t pid;
int lineno;
int fd;
+ bool sync;
// For ungetc.
UInt8 *ungetc_buf;
Modified: MacRuby/branches/experimental/io.c
===================================================================
--- MacRuby/branches/experimental/io.c 2009-03-18 19:35:34 UTC (rev 984)
+++ MacRuby/branches/experimental/io.c 2009-03-18 19:36:13 UTC (rev 985)
@@ -79,17 +79,6 @@
rb_encoding *enc, *enc2;
};
-//static int max_file_descriptor = NOFILE;
-#define UPDATE_MAXFD(fd) \
- do { \
- if (max_file_descriptor < (fd)) max_file_descriptor = (fd); \
- } while (0)
-#define UPDATE_MAXFD_PIPE(filedes) \
- do { \
- UPDATE_MAXFD((filedes)[0]); \
- UPDATE_MAXFD((filedes)[1]); \
- } while (0)
-
#define argf_of(obj) (*(struct argf *)DATA_PTR(obj))
#define ARGF argf_of(argf)
@@ -108,41 +97,41 @@
const char *m = RSTRING_PTR(rstr);
switch (*m++) {
- case 'r':
- fmode |= FMODE_READABLE;
- break;
- case 'w':
- fmode |= FMODE_WRITABLE | FMODE_TRUNC | FMODE_CREATE;
- break;
- case 'a':
- fmode |= FMODE_WRITABLE | FMODE_APPEND | FMODE_CREATE;
- break;
- default:
- error:
- rb_raise(rb_eArgError, "invalid access mode %s", m);
+ case 'r':
+ fmode |= FMODE_READABLE;
+ break;
+ case 'w':
+ fmode |= FMODE_WRITABLE | FMODE_TRUNC | FMODE_CREATE;
+ break;
+ case 'a':
+ fmode |= FMODE_WRITABLE | FMODE_APPEND | FMODE_CREATE;
+ break;
+ default:
+error:
+ rb_raise(rb_eArgError, "invalid access mode %s", m);
}
while (*m) {
- switch (*m++) {
- case 'b':
- fmode |= FMODE_BINMODE;
- break;
- case 't':
- fmode |= FMODE_TEXTMODE;
- break;
- case '+':
- fmode |= FMODE_READWRITE;
- break;
- case ':':
- goto finished;
- default:
- rb_raise(rb_eArgError, "invalid access mode %s", m);
- }
+ switch (*m++) {
+ case 'b':
+ fmode |= FMODE_BINMODE;
+ break;
+ case 't':
+ fmode |= FMODE_TEXTMODE;
+ break;
+ case '+':
+ fmode |= FMODE_READWRITE;
+ break;
+ case ':':
+ goto finished;
+ default:
+ rb_raise(rb_eArgError, "invalid access mode %s", m);
+ }
}
- finished:
+finished:
if ((fmode & FMODE_BINMODE) && (fmode & FMODE_TEXTMODE))
- goto error;
+ goto error;
return fmode;
}
@@ -153,35 +142,36 @@
int oflags = 0;
switch (fmode & FMODE_READWRITE) {
- case FMODE_READABLE:
- oflags |= O_RDONLY;
- break;
- case FMODE_WRITABLE:
- oflags |= O_WRONLY;
- break;
- case FMODE_READWRITE:
- oflags |= O_RDWR;
- break;
+ case FMODE_READABLE:
+ oflags |= O_RDONLY;
+ break;
+ case FMODE_WRITABLE:
+ oflags |= O_WRONLY;
+ break;
+ case FMODE_READWRITE:
+ oflags |= O_RDWR;
+ break;
}
if (fmode & FMODE_APPEND) {
- oflags |= O_APPEND;
+ oflags |= O_APPEND;
}
if (fmode & FMODE_TRUNC) {
- oflags |= O_TRUNC;
+ oflags |= O_TRUNC;
}
if (fmode & FMODE_CREATE) {
- oflags |= O_CREAT;
+ oflags |= O_CREAT;
}
+
return oflags;
}
-static int convert_mode_string_to_oflags(VALUE s) {
+static int
+convert_mode_string_to_oflags(VALUE s)
+{
return convert_fmode_to_oflags(convert_mode_string_to_fmode(s));
}
-
-
void
rb_eof_error(void)
{
@@ -198,7 +188,7 @@
return io;
}
-static void
+static inline void
rb_io_check_initialized(rb_io_t *fptr)
{
if (fptr == NULL) {
@@ -306,7 +296,6 @@
#define FMODE_SYNCWRITE (FMODE_SYNC|FMODE_WRITABLE)
-
static VALUE
io_alloc(VALUE klass, SEL sel)
{
@@ -325,45 +314,49 @@
{
CFReadStreamRef r = NULL;
CFWriteStreamRef w = NULL;
-
+
if (mode & FMODE_READABLE) {
- r = _CFReadStreamCreateFromFileDescriptor(NULL, fd);
+ r = _CFReadStreamCreateFromFileDescriptor(NULL, fd);
}
-
+
if (mode & FMODE_WRITABLE) {
- w = _CFWriteStreamCreateFromFileDescriptor(NULL, fd);
+ w = _CFWriteStreamCreateFromFileDescriptor(NULL, fd);
}
-
+
assert(r != NULL || w != NULL);
-
+
if (r != NULL) {
- CFReadStreamOpen(r);
- GC_WB(&io_struct->readStream, r);
- CFMakeCollectable(r);
+ CFReadStreamOpen(r);
+ GC_WB(&io_struct->readStream, r);
+ CFMakeCollectable(r);
}
- else {
- io_struct->readStream = NULL;
+ else {
+ io_struct->readStream = NULL;
}
if (w != NULL) {
- CFWriteStreamOpen(w);
- GC_WB(&io_struct->writeStream, w);
- CFMakeCollectable(w);
- } else {
- io_struct->writeStream = NULL;
+ CFWriteStreamOpen(w);
+ GC_WB(&io_struct->writeStream, w);
+ CFMakeCollectable(w);
+ }
+ else {
+ io_struct->writeStream = NULL;
}
+
// TODO: Eventually make the ungetc_buf a ByteString
io_struct->fd = fd;
io_struct->ungetc_buf = NULL;
io_struct->ungetc_buf_len = 0;
io_struct->ungetc_buf_pos = 0;
+
+ io_struct->sync = mode & FMODE_SYNC;
}
static VALUE
prep_io(int fd, int mode, VALUE klass)
{
VALUE io = io_alloc(rb_cIO, 0);
- rb_io_t *io_struct = ExtractIOStruct(io);
+ rb_io_t *io_struct = ExtractIOStruct(io);
prepare_io_from_fd(io_struct, fd, mode);
rb_objc_keep_for_exit_finalize((VALUE)io);
return io;
@@ -402,6 +395,7 @@
// TODO: Account for the port not being IO, use funcall to call .write()
// instead.
+ // TODO: Honor io_struct->sync
to_write = rb_obj_as_string(to_write);
@@ -669,7 +663,8 @@
static VALUE
rb_io_sync(VALUE io, SEL sel)
{
- rb_notimplement();
+ rb_io_t *io_struct = ExtractIOStruct(io);
+ return io_struct->sync ? Qtrue : Qfalse;
}
/*
@@ -690,7 +685,9 @@
static VALUE
rb_io_set_sync(VALUE io, SEL sel, VALUE mode)
{
- rb_notimplement();
+ rb_io_t *io_struct = ExtractIOStruct(io);
+ io_struct->sync = RTEST(mode);
+ return mode;
}
/*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090318/64a031a3/attachment-0001.html>
More information about the macruby-changes
mailing list