906 Commits

Author SHA1 Message Date
Eric Wong
3376eca80a file.c: rb_file_load_ok: GC+retry on EMFILE/ENFILE/ENOMEM
`require' should make a best effort to avoid failure on
recoverable resource exhaustion errors.
2023-02-15 03:26:47 +00:00
Jean Boussier
fe5ce1ee41 Enable write barriers on File::Stat
It holds no reference, so no changes needed.
2023-02-03 15:37:01 +01:00
git
7439ccf0ed * expand tabs. [ci skip]
Please consider using misc/expand_tabs.rb as a pre-commit hook.
2023-01-30 23:43:40 +00:00
Eric Wong
0285aa87f1 file.c: add some endif labels where appropriate
"Appropriate" for me being ifdefs which:

1) span enough lines to be hard-to-follow (I need big fonts to see)

2) nested within other ifdefs, or within large functions
   (I have a short attention span)

rb_file_expand_path_internal is the prime example of a large
function I struggle to understand due to the amount of
platform-specific ifdefs.  Hopefully this helps others with poor
vision and/or short attention spans.
2023-01-30 23:43:15 +00:00
Alan Wu
5404e2fd31
[DOC] Fix false link to ::Data 2022-12-09 21:56:02 -05:00
Samuel Williams
6fd5d2dc00
Introduce IO.new(..., path:) and promote File#path to IO#path. (#6867) 2022-12-08 18:19:53 +13:00
Yudai Takada
29e6d97517
Fix typos (#6775)
* s/Innteger/Integer/

* s/diretory/directory/

* s/Bufer/Buffer/

* s/defalt/default/

* s/covearge/coverage/
2022-11-20 21:07:18 -08:00
Samuel Williams
ea8a7287e2
Add support for sockaddr_un on Windows. (#6513)
* Windows: Fix warning about undefined if_indextoname()

* Windows: Fix UNIXSocket on MINGW and make .pair more reliable

* Windows: Use nonblock=true for read tests with scheduler

* Windows: Move socket detection from File.socket? to File.stat

Add S_IFSOCK to Windows and interpret reparse points accordingly.
Enable tests that work now.

* Windows: Use wide-char functions to UNIXSocket

This fixes behaviour with non-ASCII characters.
It also fixes deletion of temporary UNIXSocket.pair files.

* Windows: Add UNIXSocket tests for specifics of Windows impl.

* Windows: fix VC build due to missing _snwprintf

Avoid usage of _snwprintf, since it fails linking ruby.dll like so:

  linking shared-library x64-vcruntime140-ruby320.dll
  x64-vcruntime140-ruby320.def : error LNK2001: unresolved external symbol snwprintf
  x64-vcruntime140-ruby320.def : error LNK2001: unresolved external symbol vsnwprintf_l

whereas linking miniruby.exe succeeds.

This patch uses snprintf on the UTF-8 string instead.

Also remove branch GetWindowsDirectoryW, since it doesn't work.

* Windows: Fix dangling symlink test failures

Co-authored-by: Lars Kanis <kanis@comcard.de>
2022-11-17 14:50:25 -08:00
Lars Kanis
7b1d23fd29
Windows: Readlink improvements (#6745)
* Windows: Use readlink emulation for File.readlink

This fixes readlink emulation for the ERROR_MORE_DATA case and general error reporting.
It now releases GVL while readlink IO operation.

The dedicated rb_readlink was introduced in commit 2ffb87995a33cdc7ba609a4b867f03f18da0c3b3
in order to improve encoding and buffer allocation.
However the encoding issues are solved since ruby-3.0 switched to UTF-8
and the buffer allocation will be improved in a later commit.

* Windows: Increase the default buffer size for reparse point info

So far nearly all queries of reparse points needed two attempts to get enough buffer.

* Windows: Remove declaration of rb_w32_wreadlink

It was removed in commit 2f6fdd3aebdee2ce04d003b206f6da78120e8235
2022-11-17 01:57:52 -08:00
Burdette Lamar
0e1e1b1980
[DOC] Enhanced RDoc for IO (#6669) 2022-11-09 10:15:39 -06:00
Burdette Lamar
bc939d2937
[DOC] More about line number (#6582) 2022-10-19 10:34:51 -05:00
Nobuyoshi Nakada
139e79e5a9
[DOC] Remove unknown markup or macro [ci skip]
Also remove the ancient word "Windows NT".
2022-10-05 19:43:54 +09:00
Nobuyoshi Nakada
c198cf4329
Remove an unused macro [ci skip] 2022-10-03 23:19:55 +09:00
Nobuyoshi Nakada
8218cb73ba
[Bug #19034] No runtime check for utimensat if unavailable 2022-10-03 23:18:34 +09:00
Burdette Lamar
ded895baa9
[DOC] RDoc changes for IO (#6458)
Moves Expect library doc into io.c.
    Changes certain links to local sections, now pointing to sections in doc/io_streams.rdoc.
    Removes local sections now superseded by sections in doc/io_streams.rdoc.
2022-10-02 08:24:08 -05:00
Yuta Saito
e3cc1a6cae Initialize Objective-C classes before fork() for macOS 13
Since macOS 13, CFString family API used in
`rb_str_append_normalized_ospath` may internally use Objective-C classes
(`NSTaggedPointerString` and `NSPlaceholderMutableString`) for small strings.

On the other hand, Objective-C classes should not be used for the first
time in a `fork()`'ed but not `exec()`'ed process. Violations for this rule
can result deadlock during class initialization, so Objective-C runtime
conservatively crashes on such cases by default.

Therefore, we need to use CFString API to initialize Objective-C classes
used internally *before* `fork()`.

For more details, see https://bugs.ruby-lang.org/issues/18912
2022-09-26 12:03:40 +09:00
Burdette Lamar
56d773dc6f
New page IO Streams (#6383)
This page provides an overview of IO streams. It's meant to be linked to from many other doc spots. In particular it will be linked to from many places in ARGF, File, IO, and StringIO.
2022-09-21 16:34:55 -05:00
卜部昌平
0cd86ffb2e avoid ANYARGS
Use macro instead of a static functon.  This isn't very amusing but
doing this wihtout a macro (is possibe but) seems just too much.
2022-09-21 11:44:09 +09:00
S-H-GAMELINKS
79f50b9d02 Using is_broken_string function 2022-09-10 09:32:51 +09:00
Nobuyoshi Nakada
e2ccb316b4 [Bug #5317] Use rb_off_t instead of off_t
Get rid of the conflict with system-provided small `off_t`.
2022-09-08 23:01:07 +09:00
Nobuyoshi Nakada
55fef084da [Win32] Remove dead code using chsize
Already using `rb_w32_truncate` and `rb_w32_ftruncate`, and
`HAVE_FTRUNCATE` has been added 14 years ago.
2022-09-08 23:01:07 +09:00
Nobuyoshi Nakada
51291ade70
Remove extra semicolons at the top level [ci skip] 2022-09-05 00:16:47 +09:00
Nobuyoshi Nakada
35c794b26d Fixed by [Bug #18964] 2022-08-19 03:05:53 +09:00
Jean Boussier
b0b9f7201a rb_str_resize: Only clear coderange on truncation
If we are expanding the string or only stripping extra capacity
then coderange won't change, so clearing it is wasteful.
2022-08-18 10:09:08 +02:00
Takashi Kokubun
5b21e94beb Expand tabs [ci skip]
[Misc #18891]
2022-07-21 09:42:04 -07:00
Jean Boussier
d084585f01 Rename ENCINDEX_ASCII to ENCINDEX_ASCII_8BIT
Otherwise it's way too easy to confuse it with US_ASCII.
2022-07-19 08:48:56 +02:00
Nobuyoshi Nakada
5e1c182900
Remove no longer used label [ci skip] 2022-06-29 12:38:12 +09:00
Nobuyoshi Nakada
b6b9a6190d
Check availability of utimensat on macOS 2022-06-27 17:52:13 +09:00
S-H-GAMELINKS
420f3ced4d Using is_ascii_string to check encoding 2022-06-17 12:02:50 +09:00
Kazuhiro NISHIYAMA
67950a4c0a
Fix missing paren [ci skip] 2022-05-06 18:13:22 +09:00
Burdette Lamar
ae96ef9cfb
File rdoc (#5888)
Treats:
    ::pipe?
    ::symlink?
    ::socket?
    ::blockdev?
    ::chardev?
2022-05-05 15:02:54 -05:00
Burdette Lamar
72628c1ccc
Enhanced RDoc for File (#5849)
Treats:

    #path
    ::stat
    ::lstat
    #lstat
    ::directory?

Also adds section "Example Files" that explains assumptions about example files. I'm using t.txt already, and I'm pretty sure I'll need t.dat (binary data). I don't know whether I'll need t.rus (Russian text).
2022-04-26 16:49:28 -05:00
Nobuyoshi Nakada
b0666d6417
[DOC] Use consistent terms [Bug #18680] 2022-04-18 17:53:05 +09:00
Nobuyoshi Nakada
7f81f33547 Return false where sticky-bit is not provided [Bug #18734] 2022-04-15 17:52:10 +09:00
Peter Zhu
381475f02e Use an empty string when building File.expand_path
Allocating a string of length MAXPATHLEN and then shrinking the string
is inefficient when the resulting path is short. Preallocating a large
string is also a problem for Variable Width Allocation since we can't
easily downsize the capacity.

I ran the following benchmark:

```ruby
Benchmark.ips do |x|
  {
    "empty" => "",
    "short" => "a/" * 10,
    "medium" => "a/" * 100,
    "long" => "a/" * 500
  }.each do |name, path|
    x.report(name) do |times|
      i = 0
      while i < times
        File.expand_path(path)
        i += 1
      end
    end
  end
end
```

On this commit:

```
 empty     97.486k (± 0.7%) i/s -    492.915k in   5.056507s
 short     96.026k (± 2.4%) i/s -    486.489k in   5.068966s
medium     86.304k (± 1.3%) i/s -    435.336k in   5.045112s
  long     59.395k (± 1.7%) i/s -    302.175k in   5.089026s
```

On master:

```
 empty     94.138k (± 1.4%) i/s -    472.158k in   5.016590s
 short     92.043k (± 1.4%) i/s -    468.180k in   5.087496s
medium     84.910k (± 2.3%) i/s -    425.750k in   5.017007s
  long     61.503k (± 2.7%) i/s -    309.723k in   5.039429s
```
2022-04-12 09:54:57 -04:00
Burdette Lamar
d0b7df8153
Fix formatting of What's Here for File (#5717) 2022-03-25 12:16:37 -05:00
Peter Zhu
f53f49197f [DOC] Replace with IO@Modes 2022-02-07 09:52:06 -05:00
Peter Zhu
a32e5e1b97 [DOC] Use RDoc link style for links in the same class/module
I used this regex:

(?<=\[)#(?:class|module)-([A-Za-z]+)-label-([A-Za-z0-9\-\+]+)

And performed a global find & replace for this:

rdoc-ref:$1@$2
2022-02-07 09:52:06 -05:00
Peter Zhu
f9a2802bc5 [DOC] Use RDoc link style for links to other classes/modules
I used this regex:

([A-Za-z]+)\.html#(?:class|module)-[A-Za-z]+-label-([A-Za-z0-9\-\+]+)

And performed a global find & replace for this:

rdoc-ref:$1@$2
2022-02-07 09:52:06 -05:00
Peter Zhu
ecd469fad0 [DOC] Fix links in documentation for File and IO
Fixes some typos and dead links.
2022-02-07 09:52:06 -05:00
Burdette Lamar
6dc4c942a3
File rdoc (#5438)
Treats:

    File introduction
    File.open
    File.new
2022-01-13 18:00:24 -06:00
Nobuyoshi Nakada
bf97415c02 Removed deprecated Dir.exists? and File.exists? 2021-12-28 18:36:30 +09:00
Nobuyoshi Nakada
4f74153846
Adjust styles [ci skip] 2021-12-24 21:17:27 +09:00
Samuel Williams
49166fc74a Improved exception usage/classes. 2021-12-21 12:25:42 +13:00
Nobuyoshi Nakada
46e46eafd4
size_t is not for file size 2021-11-10 16:41:26 +09:00
Samuel Williams
4b89034218 IO::Buffer for scheduler interface. 2021-11-10 19:21:05 +13:00
Nobuyoshi Nakada
1ce3706c58
[DOC] Fix indent as single paragraph [ci skip] 2021-11-05 09:58:46 +09:00
U.Nakamura
3099bb6e3c rb_encoding is already const
- this change get rid of a warning of mswin build.
  see include/ruby/internal/encoding/encoding.h(116)
2021-10-14 10:23:33 +09:00
Nobuyoshi Nakada
8f480eafab rb_group_member: Simplify 2021-10-14 00:20:13 +09:00
Jeremy Evans
ee89543e09 Fix regression on Solaris after change to use realpath on loaded features
After the change to use realpath on loaded features, Solaris CI
started failing in test_no_curdir (which tests behavior for running
ruby without a working directory).

I was able to trace the problem to the following call chain:

rb_call_inits->Init_Thread->Init_thread_sync->rb_provide->
get_loaded_features_index->rb_check_realpath->rb_dir_getwd_ospath->
ruby_getcwd

This will throw an exception, but because Ruby hasn't been fully
initialized at the point the exception is thrown, it just exits
with a status of 1.

The bug here is that rb_check_realpath should not raise an
exception, it should return nil.  This bug is hit on Solaris
because Solaris uses the realpath emulation instead of native
realpath, and the realpath emualation raised instead of
returning nil if the mode was RB_REALPATH_CHECK. Use rb_rescue
in the realpath emulation if the mode is RB_REALPATH_CHECK, and
swallow any exceptions raised and return nil.
2021-10-04 19:30:01 -09:00