Commit graph

816 commits

Author SHA1 Message Date
yugui
e3b9424dfa * io.c (argf_inplace_mode_set): prohibits an assignment
of a tainted value. Patch by unak.

* util.c, file.c: prevents a buffer over-run on windows.
Patch by unak.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@28522 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-07-02 10:14:05 +00:00
yugui
ac50396895 merges r25446 and r25466 from trunk into ruby_1_9_1.
--
* io.c (io_cntl): update max file descriptor by the result of
  fcntl(F_DUPFD).
--
* io.c (io_cntl): F_DUPFD is platform dependent.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@26502 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-01-30 12:52:27 +00:00
yugui
9f79faa5d5 merges r24408 and r24409 from trunk into ruby_1_9_1.
--
* ruby.c (rb_stdio_set_default_encoding): declared.
--
* io.c (rb_stdio_set_default_encoding): prototyped.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24471 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-08 15:34:48 +00:00
yugui
944148dd91 merges r24337 from trunk into ruby_1_9_1.
--
Set encodings of stdio after setting default internal and external.

* io.c (rb_stdio_set_default_encoding): added.

* ruby.c (process_options): call rb_stdio_set_default_encoding
  after setting defualt internal and external.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24456 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-08 15:31:15 +00:00
yugui
391fc1e8d9 merges r24271 from trunk into ruby_1_9_1.
--
* io.c (argf_eof): should not have reached EOF before trying to
  read.  based on a patch by Heesob Park <phasis AT gmail.com> at
  [ruby-core:24559].  [ruby-core:24557]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24449 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-08 10:56:00 +00:00
yugui
cd516cbbe0 merges r24203 from trunk into ruby_1_9_1.
--
* io.c (io_read): should taint the result.   [ruby-dev:38826]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-26 15:32:28 +00:00
yugui
68e6b4ccbd merges r24090 from trunk into ruby_1_9_1.
--
	* io.c (pipe_open): handles leaked on win32 when an error occurs.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24120 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-15 11:57:55 +00:00
yugui
75d8ae3f08 merges r23976 from trunk into ruby_1_9_1.
--
* io.c (rb_io_ext_int_to_encs): Set external encoding if
  ext==intern. [ruby-dev:38278]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-13 06:13:10 +00:00
yugui
8bab26ece6 merges r23862 from trunk into ruby_1_9_1.
--
* io.c (argf_rewind): need to rewind $. and ARGF.lineno.
  [ruby-core:24046]

* io.c (struct argf): refactoring on $. and ARGF.lineno behavior.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-12 14:44:21 +00:00
yugui
dfcb5cf957 merges r23853 from trunk into ruby_1_9_1.
--
* io.c (argf_binmode_m): should call rb_io_ascii8bit_binmode() to
  set its encoding to ASCII-8BIT.  [ruby-core:24029]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24039 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-12 13:56:51 +00:00
yugui
92045f3d00 merges 23699 and 23705 from trunk into ruby_1_9_1.
--
* io.c (fptr_finalize): skip close(2) for fd 0,1,2.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23791 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-06-21 09:16:18 +00:00
yugui
b00a819511 merges the latter half of r23699 and r23706 from trunk into ruby_1_9_1.
--
* io.c (argf_skip): should close only when current_file is available.
--
* test/ruby/test_argf.rb (TestArgf#test_skip): updated test
  according to clarified behavior.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23790 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-06-21 09:16:06 +00:00
yugui
8eb441fda6 merges r23694 from trunk into ruby_1_9_1.
--
* io.c (argf_each_line): should return self.  [ruby-core:23852]

* io.c (argf_each_byte, argf_each_char): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23788 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-06-21 09:15:39 +00:00
yugui
94d336ef86 merges r23287 from trunk into ruby_1_9_1.
--
* io.c (io_reopen): keeps pathv for prep_stdio.  [ruby-dev:38131]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23397 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-05-11 15:05:52 +00:00
yugui
48667901a5 merges r22902 from trunk into ruby_1_9_1.
--
* io.c (copy_stream_fallback_body): off_t may be larger than long.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23185 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-04-12 14:03:46 +00:00
yugui
ed5b6231df merges r22610 from trunk into ruby_1_9_1.
--
* io.c (rb_io_getline_1): enables limit even if rs is given.
  [ruby-core:22434]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@22740 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-03-03 11:40:41 +00:00
yugui
6ac1783d4b merges r22146 from trunk into ruby_1_9_1.
* io.c (io_encoding_set): ignore second argument when external and
  internal are same. [ruby-dev:37939]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@22523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-22 09:48:57 +00:00
yugui
b08d687d0a merges r22121 from trunk into ruby_1_9_1.
* io.c (rb_io_s_binread): ensures file path.  [ruby-dev:37940]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@22519 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-22 09:48:27 +00:00
yugui
930729e695 merges r22099 from trunk into ruby_1_9_1.
* io.c (io_fread): use rb_io_wait_readable for retry
  avoid Errno::EINTR on ruby -e 'trap(:CHLD) {}; spawn("sleep 1"); STDIN.read'

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@22518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-22 09:48:19 +00:00
yugui
0cc6f32d32 merges r22037 from trunk into ruby_1_9_1.
rdoc update.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@22511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-22 09:47:29 +00:00
yugui
6c04b9531c merges r21715 and r21718 from trunk into ruby_1_9_1.
* io.c (rb_io_ungetbyte, rb_io_ungetc): clears EOF flag.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-28 09:20:46 +00:00
yugui
62b07ab133 merges r21709, r21710 from trunk into ruby_1_9_1.
* include/ruby/io.h (FMODE_EOF): EOF flag on TTY.
* io.c (io_set_eof): sets EOF flag for TTY.
* io.c (io_seek): clears EOF flag.
* io.c (io_fillbuf): returns EOF if already met EOF.  [ruby-dev:37798]
* io.c (io_fillbuf, io_fread, io_getpartial): sets EOF.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21816 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-28 09:20:37 +00:00
yugui
fea523c18b merges r21504 from trunk into ruby_1_9_1.
* io.c (rb_io_wait_readable, rb_io_wait_writable): need rb_fd_ptr.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21557 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-15 15:38:31 +00:00
yugui
a0eb50c4d9 merges r21503 from trunk into ruby_1_9_!.
* io.c (appendline): reformed.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21556 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-15 15:38:17 +00:00
yugui
12e5996d83 merges r21492 and r21495 from trunk into ruby_1_9_1.
* io.c (rb_io_close_read): call rb_io_fptr_cleanup() instead of
	  fptr_finalize() because the fptr has special finalizser if it is a
	  pipe.  [ruby-dev:37757] (3)

	* io.c (io_reopen, rb_io_init_copy): should register fptr to
	  pipe_list when copying pipe fptr.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-15 15:37:51 +00:00
yugui
298efbfad6 merges r21491 from trunk into ruby_1_9_1.
* io.c (rb_io_initialize): workaround for Windows. [ruby-dev:37686]
          (also see [ruby-dev:37721])

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-15 15:37:42 +00:00
yugui
a78c02923b merges r21288 from trunk into ruby_1_9_1.
* io.c (maygvl_copy_stream_wait_read): renamed to add prefix to
  express GVL state.
  (nogvl_copy_stream_wait_write): ditto.
  (nogvl_copy_stream_sendfile): ditto.
  (maygvl_copy_stream_read): ditto.
  (nogvl_copy_stream_write): ditto.
  (nogvl_copy_stream_read_write): ditto.
  (nogvl_copy_stream_func): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21320 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-04 14:05:19 +00:00
yugui
8ed6868de0 merges r21211 and r21213 from trunk into ruby_1_9_1.
update rdoc.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21230 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-01 06:42:39 +00:00
yugui
89c2ab70a4 merges r21209 from trunk into ruby_1_9_1.
* io.c (copy_stream_body): don't check to_io because
  Zlib::GzipWriter#to_io returns the underlying IO.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21229 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-01 06:42:23 +00:00
yugui
90326df926 merges r21068 from trunk into ruby_1_9_1.
* io.c (fptr_finalize): don't allocate objects if noraise.
  (finish_writeconv): add noalloc argument to be able to avoid
  object allocation.
  (finish_writeconv_arg): introduced again.
  (finish_writeconv_sync): follow the above change.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21073 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-26 11:16:43 +00:00
yugui
d2165fe2bb merges r21059 from trunk into ruby_1_9_1.
* io.c (fptr_finalize): close the IO object even if finish_writeconv or
  flush is failed.
  (finish_writeconv): don't raise.  return errno or exception.
  (finish_writeconv_arg): removed.
  (finish_writeconv_sync): follow finish_writeconv change.

* transcode.c (rb_econv_make_exception): new function.

* include/ruby/encoding.h (rb_econv_make_exception): declared.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21069 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-26 11:16:07 +00:00
yugui
096d5338bd merges r20990 from trunk into ruby_1_9_1.
* io.c (rb_io_initialize): check fd validity.  [ruby-dev:36646]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21041 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-25 09:58:18 +00:00
yugui
f1f90757c4 merges r20989 from trunk into ruby_1_9_1.
* io.c (flush_before_seek): check io_fflush result.
  (rb_io_check_readable): ditto.
  (rb_io_flush): ditto.
  (rb_io_fsync): ditto.
  (remain_size): ditto.
  (rb_io_write_nonblock): ditto.
  (finish_writeconv): ditto.
  (fptr_finalize): ditto.
  (io_reopen): ditto.
  (rb_io_reopen): ditto.
  (copy_stream_body): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21040 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-25 09:58:07 +00:00
yugui
107347961b merges r20988 from trunk into ruby_1_9_1.
* io.c (io_fflush): flush write buffer without write lock in
  finalizers.  [ruby-dev:37572]

* io.c (rb_io_fptr_finalize): clear write lock before finalizing.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21039 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-25 09:57:52 +00:00
yugui
5b7d89de75 merges r20987 from trunk into ruby_1_9_1.
* io.c (fptr_finalize): close the IO object even if close(2) is failed.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21038 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-25 09:57:40 +00:00
yugui
b9bab42804 merges r20982 and r20983 from trunk into ruby_1_9_1.
* io.c (rb_io_flush): fsync() after buffer is flushed on win32.
	  [ruby-core:20043]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21035 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-25 09:57:13 +00:00
yugui
c2f1f60fc2 merges r20954 from trunk into ruby_1_9_1.
* io.c (rb_io_init_copy): call io_seek only if io_tell succeeds.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21018 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-25 09:54:32 +00:00
yugui
9c171e3d6b merges r20946 from trunk into ruby_1_9_1.
* io.c: rdoc for File::open and 1.9 feature in file modes.

* transcode.c: rdoc for String#encode

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21017 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-25 09:54:17 +00:00
yugui
9f00ed1310 merges r20934 from trunk into ruby_1_9_1.
* io.c (pipe_open): need to initialize args.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21010 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-25 09:53:11 +00:00
yugui
1bfa299015 merges r20892 from trunk into ruby_1_9_1.
* dln.c (dln_find_1): supplements an extension for executable
  files on DOSish platforms.

* io.c (pipe_open): use rb_w32_aspawn() for array form.

* win32/win32.c (rb_w32_pipe_exec): no longer used.

* win32/win32.c (rb_w32_spawn, rb_w32_aspawn): deals with batch
  files and commands with extensions.  [ruby-core:20695]

* win32/win32.c (has_redirection): supports environment variables
  references.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-21 05:27:20 +00:00
yugui
82d84b4971 merges r20528 from trunk into ruby_1_9_1.
* win32/win32.c (rb_w32_read): ERROR_BROKEN_PIPE is not a real error
	  at this point.

	* io.c (pipe_open): use rb_w32_spawn() instead of rb_w32_pipe_exec()
	  to use our own redirection scheme.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-21 05:27:06 +00:00
yugui
600a52cac1 merges r20870 from trunk into ruby_1_9_1.
* io.c (rb_io_extract_encoding_option): "internal_encoding: nil"
  to specify no-transcoding.  and other corner case fixed.
  [ruby-dev:37496]

* hash.c (rb_hash_lookup2): new function to look-up hash with
  default value.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-19 12:12:03 +00:00
akr
8613423945 rdoc fix.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20649 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-11 16:17:56 +00:00
yugui
72c96b806c merges r20532 from trunk into ruby_1_9_1.
* io.c (io_binwrite): arg.offset should be updated after retry.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-05 13:34:16 +00:00
yugui
a78d9cd85a merges r20472 from trunk into ruby_1_9_1.
update rdoc.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20500 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-04 08:55:02 +00:00
yugui
65616e8940 merges r20458 and r20459 from trunk into ruby_1_9_1.
* io.c (rb_io_getc, rb_io_readchar): documentation correction from
  Emiel van de Laar.  [ruby-core:20212]

* ext/stringio/stringio.c (strio_ungetbyte): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-04 08:54:37 +00:00
yugui
7d0e1c3a77 merges r20144 from trunk into ruby_1_9_1.
* include/ruby/io.h (rb_io_t): added write_lock to serialize.
  [ruby-core:19668]

* gc.c (gc_mark_children): mark write_lock.

* gc.c (rb_gc_call_finalizer_at_exit): Mutex also needs to be
  deferred.

* io.c (io_fflush, io_binwrite, fptr_finalize): serializes writing.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-11 11:00:29 +00:00
yugui
58b6ac5f67 merges r20045 from trunk into ruby_1_9_1.
* io.c (rb_io_rewind): should reset fptr->readconv if it's
  available.

* io.c (more_char): clear readconv at EOF.

* test/ruby/test_file.rb: should not read after EOF.  use rewind
  instead.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20058 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-10-30 12:09:24 +00:00
usa
605102f3cb merge from trunk (r19984, r19985, r19991-r19998)
* io.c (extract_binmode): new function to extract binmode/textmode
	  options from hash.

	* io.c (rb_io_extract_modeenc): use above function.

	* io.c (rb_io_s_pipe): recognize binmode/textmode options.

	* io.c (make_readconv): now can specify the size of cbuf.

	* io.c (read_all, appendline, io_getc, rb_io_ungetc): follow above
	  change.

	* win32/win32.c (rb_w32_pipe_exec): internal fds should be always
	  binmode.

	* test/ruby/test_file.rb (test_each_char_extended_file,
	  test_getbyte_extended_file): add tests.

	* test/ruby/test_file.rb (test_*_extended_file): test in default/text/
	  binary mode.

	* test/ruby/test_file.rb (test_para_gets_extended_file): output file
	  should be binmode.

	* test/ruby/test_io.rb (test_copy_stream, test_copy_stream_socket): skip
	  some tests if there isn't IO#nonblock=.

	* test/ruby/test_io.rb (test_close_on_exec): skip if there isn't
	  IO#close_on_exec=.

	* test/ruby/test_io.rb (test_bytes, test_readbyte): depend on binmode.

	* test/ruby/test_io.rb (test_sysopen): should specify the mode of
	  IO::for_fd if F_GETFL is not available.

	* test/ruby/test_io_m17n.rb (test_getc_invalid3): should set binmode if 
	  enc is not compatible with ASCII.

	* test/ruby/test_require.rb (test_require_too_long_filename): too long
	  commandline may be rejected by OS.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@19999 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-10-28 12:17:54 +00:00
nobu
782f3bd3f9 * io.c (argf_init): initial value of $. should be 0.
see [ruby-dev:36937].


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19964 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-10-27 06:55:06 +00:00