Commit Graph

54 Commits

Author SHA1 Message Date
Yukihiro "Matz" Matsumoto c54d5abdaf mruby-dir: unify int and mrb_int types for consistency
Change int variables to mrb_int in mrb_dir_getwd and mrb_dir_chroot
to maintain consistent use of mruby's integer type internally.
Keep explicit casts only at system interface boundaries where
different types are required by system calls.

Eliminates VC warning C4267 while following the same type
unification approach used in pack.c.

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-03 19:46:02 +09:00
Yukihiro "Matz" Matsumoto 0ce99e442d mruby-dir: fix C4244 warning in mrb_dir_getwd function
use mrb_int for size variable and cast to size_t only when calling getcwd.
this maintains consistency with mruby type system while avoiding
conversion warnings on windows vc compiler.

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-22 18:20:47 +09:00
Yukihiro "Matz" Matsumoto 2113b7cd23 mruby-dir: implement Dir.children in c for improved performance
Moved Dir.children from Ruby to C implementation to eliminate
Ruby loop overhead and string comparison inefficiencies.
Uses existing skip_name_p helper to filter out "." and ".." entries
efficiently in C.

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-19 10:06:16 +09:00
Yukihiro "Matz" Matsumoto c699b211d7 mruby-dir: implement Dir.entries in c for improved performance
Moved Dir.entries from Ruby to C implementation to eliminate
Ruby loop overhead and array allocation inefficiencies.
Builds result array directly in C for better performance.

Co-authored-by: Claude <noreply@anthropic.com>
2025-08-19 10:06:16 +09:00
Yukihiro "Matz" Matsumoto 785d3b81d5 mruby-dir: add comprehensive call-seq documentation for Ruby and C methods
Added complete call-seq documentation for directory operations across
both mrblib/dir.rb (7 Ruby methods) and src/dir.c (12 C methods):

## Ruby Methods (mrblib/dir.rb):

- Dir instance methods: each, each_child for directory iteration with
  enumerator support when no block given

- Dir class methods: entries, children for getting directory contents
  as arrays, foreach for iteration, open for directory access with
  optional block handling, chdir for changing working directory with
  optional block for temporary changes

## C Methods (src/dir.c):

- Dir class methods: delete for removing directories, exist? for checking
  directory existence, getwd/pwd for current directory, mkdir for creating
  directories with optional permissions, chroot for changing filesystem root,
  empty? for checking if directory is empty

- Dir instance methods: new for creating directory objects, close for
  closing directory streams, read for reading directory entries, rewind
  for repositioning to beginning, seek/tell/pos for directory positioning

Co-authored-by: Atlassian Rovo Dev
2025-08-14 10:52:45 +09:00
dearblue 1326017d1d Omit the _WIN64 definition check
Checking the official MSVC documentation, if `_WIN64` is defined, then `_WIN32` is also defined.
https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros

I could not find any documentation on MinGW, but I assume it is not a problem.
2024-12-07 22:47:28 +09:00
dearblue 3aa9a5ee68 Perform GC before deleting directories
In some environments, the test will fail because the directory in use cannot be deleted.
This problem was encountered when building 32-bit binary with mingw32 on FreeBSD and running on wine.
2024-09-10 21:17:10 +09:00
Yukihiro "Matz" Matsumoto 3628d093f4 mruby-dir: use presym for initialization 2024-06-14 00:27:13 +09:00
Yukihiro "Matz" Matsumoto c635456f16 mruby-dir: fix indentation 2024-05-16 07:06:59 +09:00
Yukihiro "Matz" Matsumoto 7865593823 mruby-dir: enumerating methods should return enumerators; #6265 2024-05-14 09:42:38 +09:00
dearblue 12030b3f41 Fixes Dir.children and Dir.each_child
The two methods exclude "." and "..".
2024-05-10 21:54:59 +09:00
Yukihiro "Matz" Matsumoto 87b358a342 Including header files in include/* by <> 2024-03-26 13:59:59 +09:00
Yukihiro "Matz" Matsumoto 5de3be1bee mruby-dir/dir.c (mrb_di_getwd): reduce buffer allocation size
Instead of allocating `MAXPATHLEN` buffer string at the beginning,
allocate smaller (64 bytes) buffer, then resize it if needed. The
allocating max size is safe but consumes more memory.
2023-08-08 11:24:14 +09:00
Ray Chason 23e9befbc0 Changes to cross-compile with DJGPP 2023-06-17 17:20:33 -04:00
Yukihiro "Matz" Matsumoto f1a3cfbd3b add a space between if and ( 2023-05-22 11:55:21 +09:00
Yukihiro "Matz" Matsumoto c32f7915fb reformat else clause indentation style 2023-05-20 00:21:01 +09:00
John Bampton 63e170170e mrbgems: standardize spec.authors for whitespace and author name 2023-05-06 06:06:29 +10:00
Yukihiro "Matz" Matsumoto b4c936b533 use new E_EXCEPTION and E_STANDARD_ERROR; ref #5924 2023-02-10 15:21:38 +09:00
John Bampton 07a7d2a6cb md/yml: remove unneeded blank lines and whitespace 2023-02-10 14:02:57 +10:00
Yukihiro "Matz" Matsumoto 1bba8cf53b mruby-dir: remove files needed for an independent gem 2023-01-10 10:53:15 +09:00
dearblue 72ab1821de Avoid IOError when returning from Dir.open
Ignore `IOError` if `Dir#close` was done in the block.
2023-01-01 17:40:50 +09:00
Yukihiro "Matz" Matsumoto bb3f403511 Merge pull request #5876 from dearblue/dir-foreach
Close the directory object with the `Dir.foreach` method
2022-12-26 13:27:53 +09:00
Yukihiro "Matz" Matsumoto 3518d15d04 Merge pull request #5875 from dearblue/dir-cstr
Get argument of the `Dir` method takes a C string directly
2022-12-26 13:26:56 +09:00
Yukihiro "Matz" Matsumoto 2656a92380 Merge pull request #5874 from dearblue/dir-funcs
Hide substance functions of methods in `mruby-dir`
2022-12-26 12:58:44 +09:00
dearblue 50b24c124f Close the directory object with the Dir.foreach method 2022-12-25 21:25:30 +09:00
dearblue 1fb19ca046 Get argument of the Dir method takes a C string directly 2022-12-25 21:25:30 +09:00
dearblue 71df263bdf Hide substance functions of methods in mruby-dir 2022-12-25 21:25:30 +09:00
dearblue 35490c2c32 Define also the exception class IOError in mruby-dir
Since `IOError` is a standard exception class in Ruby, there is no need to assume different superclasses.
The Ruby specification allows repeated class definitions as long as the superclass is the same.

This also avoids using the `mruby/ext/io.h` file to reference `E_IO_ERROR`.
2022-12-25 21:25:21 +09:00
dearblue fec74cd040 Avoid uses mruby/src/error.h file 2022-12-25 17:31:53 +09:00
Yukihiro "Matz" Matsumoto 7821462571 mruby-dir/dirtest.c: need to include <io.h> for mktemp() on Windows 2022-12-22 22:07:07 +09:00
Yukihiro "Matz" Matsumoto 67addd7da3 mruby-dir/dirtest.c: avoid string allocations for mrb_raisef 2022-12-22 11:36:03 +09:00
Yukihiro "Matz" Matsumoto 1d174404b3 mruby-dir/dirtest.c: refactor mkdir in mrb_dirtest_setup 2022-12-22 11:33:44 +09:00
Yukihiro "Matz" Matsumoto d51d5825ad mruby-dir/dir.c: update compatibility macros for Windows 2022-12-22 11:13:50 +09:00
Yukihiro "Matz" Matsumoto 084871abf3 mruby-dir/dirtest.c: use _mktemp instead of mktemp for Windows 2022-12-22 11:12:32 +09:00
Yukihiro "Matz" Matsumoto c737519d02 mruby-dir/dirtest.c: add compatibility macro for getcwd 2022-12-22 11:11:49 +09:00
Yukihiro "Matz" Matsumoto 4cbcf743a7 mruby-dir/dirtest.c: wrap function prototypes by extern "C" 2022-12-22 11:11:18 +09:00
Yukihiro "Matz" Matsumoto 783e62e582 mruby-dir/dirtest.c: copy some of dirent header information
Instead of including whole "dirent.c" file.
2022-12-22 09:53:16 +09:00
Yukihiro "Matz" Matsumoto 965d1d1554 mruby-dir/dirtest.c: should not include <unistd.h> 2022-12-22 09:27:13 +09:00
Yukihiro "Matz" Matsumoto 0aa8ce5c57 mruby-dir/dirtest.c: did not work for Windows 2022-12-22 09:10:40 +09:00
Yukihiro "Matz" Matsumoto cfb2d3e888 mruby-dir: include Enumerable module 2022-12-22 00:03:28 +09:00
Yukihiro "Matz" Matsumoto ca3b694efe mruby-dir/dir.rb: make each_child as an alias to each 2022-12-22 00:02:33 +09:00
Yukihiro "Matz" Matsumoto 3d6a4c39bf mruby-dir: reformat 2022-12-21 15:18:09 +09:00
Yukihiro "Matz" Matsumoto d656ea87c6 mruby-dir: add compatibility macro 2022-12-21 15:15:10 +09:00
Yukihiro "Matz" Matsumoto b93a624b5f mruby-dir/dir.c: add new method Dir.empty?(path) 2022-12-21 15:11:37 +09:00
Yukihiro "Matz" Matsumoto e4b80cc282 mruby-dir/dir.rb: add new method children as an alias to entries 2022-12-21 14:48:22 +09:00
Yukihiro "Matz" Matsumoto 818212b5db mruby-dir/dir.rb: rename each to each_child 2022-12-21 14:44:24 +09:00
Yukihiro "Matz" Matsumoto afcdf5e803 mruby-dir/dir.rb: simplify loop delegation 2022-12-21 14:42:50 +09:00
Yukihiro "Matz" Matsumoto d3e997f4f9 mruby-dir: remove run_test.rb that is no longer used 2022-12-20 22:13:34 +09:00
Yukihiro "Matz" Matsumoto 4b48c86103 mruby-dir: extra spaces and typos are removed 2022-12-20 22:12:21 +09:00
Yukihiro "Matz" Matsumoto f486069a94 mruby-dir/test: reformat 2022-12-20 21:56:52 +09:00