Ruby 1.9.2p136(2010-12-25revision30365)

- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

Data Structures | Defines | Enumerations | Functions | Variables

# dir.c File Reference

`#include "ruby/ruby.h"`
`#include "ruby/encoding.h"`
`#include <sys/types.h>`
`#include <sys/stat.h>`
`#include <errno.h>`
`#include <ctype.h>`
`#include "ruby/util.h"`
Include dependency graph for dir.c:

Go to the source code of this file.

## Data Structures
struct | dir_data
struct | chdir_data
struct | glob_pattern
struct | glob_args
struct | brace_args
## Defines
#define | dirent direct
#define | NAMLEN(dirent) (dirent)->d_namlen
#define | lstat stat
#define | FNM_NOESCAPE 0x01
#define | FNM_PATHNAME 0x02
#define | FNM_DOTMATCH 0x04
#define | FNM_CASEFOLD 0x08
#define | FNM_SYSCASE 0
#define | FNM_NOMATCH 1
#define | FNM_ERROR 2
#define | Next(p, e, enc) (p + rb_enc_mbclen(p, e, enc))
#define | Inc(p, e, enc) ((p) = Next(p, e, enc))
#define | UNESCAPE(p) (escape && *(p) == '\\' ? (p) + 1 : (p))
#define | ISEND(p) (!*(p) || (pathname && *(p) == '/'))
#define | RETURN(val) return *pcur = p, *scur = s, (val);
#define | GlobPathValue(str, safe)
#define | check_safe_glob(str, safe) ((safe) ? rb_check_safe_obj(str) : (void)0)
#define | check_glob_encoding(str) rb_enc_check((str), rb_enc_from_encoding(rb_usascii_encoding()))
#define | GetDIR(obj, dirp) (dirp = dir_check(obj))
#define | READDIR(dir, enc, entry, dp) ((dp = readdir(dir)) != 0)
#define | IF_HAVE_READDIR_R(something)
#define | DEFINE_STRUCT_DIRENT struct dirent
#define | STRUCT_DIRENT(entry) (entry)
#define | dir_tell rb_f_notimplement
#define | dir_seek rb_f_notimplement
#define | dir_s_chroot rb_f_notimplement
#define | GLOB_VERBOSE (1U << (sizeof(int) * CHAR_BIT - 1))
#define | sys_warning(val) (void)((flags & GLOB_VERBOSE) && rb_protect(sys_warning_1, (VALUE)(val), 0))
#define | GLOB_ALLOC(type) (type *)malloc(sizeof(type))
#define | GLOB_ALLOC_N(type, n) (type *)malloc(sizeof(type) * (n))
#define | GLOB_FREE(ptr) free(ptr)
#define | GLOB_JUMP_TAG(status) ((status == -1) ? rb_memerror() : rb_jump_tag(status))
#define | to_be_ignored(e) ((e) == ENOENT || (e) == ENOTDIR)
#define | S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
#define | S_ISLNK(m) (0)
#define | glob_call_func(func, path, arg, enc) (*func)(path, arg, enc)
## Enumerations
enum | glob_pattern_type { PLAIN, MAGICAL, RECURSIVE, MATCH_ALL, MATCH_DIR }
enum | answer { YES, NO, UNKNOWN }
## Functions
char * | getenv ()
char * | strchr (char *, char)
static char * | bracket (const char *p, const char *pend, const char *s, const char *send, int flags, rb_encoding *enc)
static int | fnmatch_helper (const char **pcur, const char **scur, int flags, rb_encoding *enc)
static int | fnmatch (const char *pattern, rb_encoding *enc, const char *string, int flags)
static void | dir_mark (void *ptr)
static void | dir_free (void *ptr)
static size_t | dir_memsize (const void *ptr)
static VALUE | dir_close (VALUE)
static VALUE | dir_s_alloc (VALUE klass)
static VALUE | dir_initialize (int argc, VALUE *argv, VALUE dir)
static VALUE | dir_s_open (int argc, VALUE *argv, VALUE klass)
static void | dir_closed (void)
static struct dir_data * | dir_check (VALUE dir)
static VALUE | dir_inspect (VALUE dir)
static VALUE | dir_path (VALUE dir)
static VALUE | dir_read (VALUE dir)
static VALUE | dir_each (VALUE dir)
static VALUE | dir_set_pos (VALUE dir, VALUE pos)
static VALUE | dir_rewind (VALUE dir)
static void | dir_chdir (VALUE path)
static VALUE | chdir_yield (struct chdir_data *args)
static VALUE | chdir_restore (struct chdir_data *args)
static VALUE | dir_s_chdir (int argc, VALUE *argv, VALUE obj)
VALUE | rb_dir_getwd (void)
static VALUE | dir_s_getwd (VALUE dir)
static void | check_dirname (volatile VALUE *dir)
static VALUE | dir_s_mkdir (int argc, VALUE *argv, VALUE obj)
static VALUE | dir_s_rmdir (VALUE obj, VALUE dir)
static VALUE | sys_warning_1 (VALUE mesg)
static int | do_stat (const char *path, struct stat *pst, int flags)
static int | do_lstat (const char *path, struct stat *pst, int flags)
static DIR * | do_opendir (const char *path, int flags)
static int | has_magic (const char *p, const char *pend, int flags, rb_encoding *enc)
static char * | find_dirsep (const char *p, const char *pend, int flags, rb_encoding *enc)
static void | remove_backslashes (char *p, rb_encoding *enc)
static void | glob_free_pattern (struct glob_pattern *list)
static struct glob_pattern * | glob_make_pattern (const char *p, const char *e, int flags, rb_encoding *enc)
static char * | join_path (const char *path, int dirsep, const char *name)
static VALUE | glob_func_caller (VALUE val)
static int | glob_helper (const char *path, int dirsep, enum answer exist, enum answer isdir, struct glob_pattern **beg, struct glob_pattern **end, int flags, ruby_glob_func *func, VALUE arg, rb_encoding *enc)
static int | ruby_glob0 (const char *path, int flags, ruby_glob_func *func, VALUE arg, rb_encoding *enc)
int | ruby_glob (const char *path, int flags, ruby_glob_func *func, VALUE arg)
static int | rb_glob_caller (const char *path, VALUE a, void *enc)
static int | rb_glob2 (const char *path, int flags, void(*func)(const char *, VALUE, void *), VALUE arg, rb_encoding *enc)
void | rb_glob (const char *path, void(*func)(const char *, VALUE, void *), VALUE arg)
static void | push_pattern (const char *path, VALUE ary, void *enc)
static int | ruby_brace_expand (const char *str, int flags, ruby_glob_func *func, VALUE arg, rb_encoding *enc)
static int | glob_brace (const char *path, VALUE val, void *enc)
static int | ruby_brace_glob0 (const char *str, int flags, ruby_glob_func *func, VALUE arg, rb_encoding *enc)
int | ruby_brace_glob (const char *str, int flags, ruby_glob_func *func, VALUE arg)
int | ruby_brace_glob_with_enc (const char *str, int flags, ruby_glob_func *func, VALUE arg, rb_encoding *enc)
static int | push_glob (VALUE ary, VALUE str, int flags)
static VALUE | rb_push_glob (VALUE str, int flags)
static VALUE | dir_globs (long argc, VALUE *argv, int flags)
static VALUE | dir_s_aref (int argc, VALUE *argv, VALUE obj)
static VALUE | dir_s_glob (int argc, VALUE *argv, VALUE obj)
static VALUE | dir_open_dir (int argc, VALUE *argv)
static VALUE | dir_foreach (int argc, VALUE *argv, VALUE io)
static VALUE | dir_entries (int argc, VALUE *argv, VALUE io)
static VALUE | file_s_fnmatch (int argc, VALUE *argv, VALUE obj)
VALUE | rb_home_dir (const char *user, VALUE result)
static VALUE | dir_s_home (int argc, VALUE *argv, VALUE obj)
void | Init_Dir (void)
## Variables
VALUE | rb_cDir
static const rb_data_type_t | dir_data_type
static int | chdir_blocking = 0
static VALUE | chdir_thread = Qnil

## Define Documentation

#define check_glob_encoding | ( |  | str | ) | rb_enc_check((str), rb_enc_from_encoding(rb_usascii_encoding()))

Definition at line 361 of file dir.c.

#define check_safe_glob | ( |  | str,
|  |  | safe
| ) |  | ((safe) ? rb_check_safe_obj(str) : (void)0)

Definition at line 360 of file dir.c.

#define DEFINE_STRUCT_DIRENT struct dirent

Definition at line 557 of file dir.c.

Referenced by dir_each(), dir_read(), and glob_helper().

#define dir_s_chroot rb_f_notimplement

Definition at line 937 of file dir.c.

Referenced by Init_Dir().

#define dir_seek rb_f_notimplement

Definition at line 685 of file dir.c.

Referenced by dir_set_pos(), and Init_Dir().

#define dir_tell rb_f_notimplement

Definition at line 656 of file dir.c.

Referenced by Init_Dir().

#define dirent direct

Definition at line 31 of file dir.c.

Referenced by dir_each(), dir_read(), and glob_helper().

#define FNM_CASEFOLD 0x08

Definition at line 83 of file dir.c.

Referenced by bracket(), fnmatch_helper(), has_magic(), and Init_Dir().

#define FNM_DOTMATCH 0x04

Definition at line 82 of file dir.c.

Referenced by fnmatch(), fnmatch_helper(), and Init_Dir().

#define FNM_ERROR 2

Definition at line 91 of file dir.c.

#define FNM_NOESCAPE 0x01

Definition at line 80 of file dir.c.

Referenced by bracket(), find_dirsep(), fnmatch_helper(), glob_helper(), has_magic(), Init_Dir(), and ruby_brace_expand().

#define FNM_NOMATCH 1

Definition at line 90 of file dir.c.

Referenced by fnmatch(), and fnmatch_helper().

#define FNM_PATHNAME 0x02

Definition at line 81 of file dir.c.

Referenced by fnmatch(), fnmatch_helper(), and Init_Dir().

#define FNM_SYSCASE 0

Definition at line 87 of file dir.c.

Referenced by has_magic(), Init_Dir(), rb_glob2(), and ruby_glob0().

#define GetDIR | ( |  | obj,
|  |  | dirp
| ) |  | (dirp = dir_check(obj))

Definition at line 474 of file dir.c.

Referenced by dir_close(), dir_each(), dir_read(), and dir_rewind().

#define GLOB_ALLOC | ( |  | type | ) | (type *)malloc(sizeof(type))

Definition at line 1005 of file dir.c.

Referenced by glob_make_pattern().

#define GLOB_ALLOC_N | ( |  | type,
|  |  | n
| ) |  | (type *)malloc(sizeof(type) * (n))

Definition at line 1006 of file dir.c.

Referenced by glob_helper(), glob_make_pattern(), join_path(), ruby_brace_expand(), and ruby_glob0().

#define glob_call_func | ( |  | func,
|  |  | path,
|  |  | arg,
|  |  | enc
| ) |  | (*func)(path, arg, enc)

Definition at line 1275 of file dir.c.

Referenced by glob_helper().

#define GLOB_FREE | ( |  | ptr | ) | free(ptr)

Definition at line 1007 of file dir.c.

Referenced by glob_free_pattern(), glob_helper(), glob_make_pattern(), ruby_brace_expand(), and ruby_glob0().

#define GLOB_JUMP_TAG | ( |  | status | ) | ((status == -1) ? rb_memerror() : rb_jump_tag(status))

Definition at line 1008 of file dir.c.

Referenced by dir_globs(), rb_glob(), and rb_push_glob().

#define GLOB_VERBOSE (1U << (sizeof(int) * CHAR_BIT - 1))

Definition at line 1001 of file dir.c.

Referenced by push_glob(), rb_glob2(), ruby_brace_glob(), ruby_brace_glob_with_enc(), and ruby_glob().

#define GlobPathValue | ( |  | str,
|  |  | safe
| ) |  |

Value:

    /* can contain null bytes as separators */      \
        (!RB_TYPE_P(str, T_STRING) ?                \
         FilePathValue(str) :                       \
         (check_safe_glob(str, safe),               \
          check_glob_encoding(str), (str)))

Definition at line 354 of file dir.c.

Referenced by dir_globs(), dir_initialize(), and rb_push_glob().

#define IF_HAVE_READDIR_R | ( |  | something | ) |

Definition at line 525 of file dir.c.

Referenced by dir_each(), dir_read(), and glob_helper().

#define Inc | ( |  | p,
|  |  | e,
|  |  | enc
| ) |  | ((p) = Next(p, e, enc))

Definition at line 94 of file dir.c.

Referenced by fnmatch(), fnmatch_helper(), remove_backslashes(), and ruby_brace_expand().

#define ISEND | ( |  | p | ) | (!*(p) || (pathname && *(p) == '/'))

Definition at line 171 of file dir.c.

Referenced by fnmatch_helper().

#define lstat stat

Definition at line 67 of file dir.c.

Referenced by do_lstat().

#define NAMLEN | ( |  | dirent | ) | (dirent)->d_namlen

Definition at line 33 of file dir.c.

Referenced by dir_each(), and dir_read().

#define Next | ( |  | p,
|  |  | e,
|  |  | enc
| ) |  | (p + rb_enc_mbclen(p, e, enc))

Definition at line 93 of file dir.c.

Referenced by find_dirsep(), and has_magic().

#define READDIR | ( |  | dir,
|  |  | enc,
|  |  | entry,
|  |  | dp
| ) |  | ((dp = readdir(dir)) != 0)

Definition at line 520 of file dir.c.

Referenced by dir_each(), dir_read(), and glob_helper().

#define RETURN | ( |  | val | ) | return *pcur = p, *scur = s, (val);

Definition at line 172 of file dir.c.

Referenced by big5_mbc_enc_len0(), cp949_mbc_enc_len(), euckr_mbc_enc_len(), euctw_mbc_enc_len(), fnmatch_helper(), gb18030_mbc_enc_len(), and gbk_mbc_enc_len().

#define S_ISDIR | ( |  | m | ) | ((m & S_IFMT) == S_IFDIR)

Definition at line 1248 of file dir.c.

Referenced by glob_helper(), path_check_0(), rb_file_directory_p(), rb_file_ftype(), and rb_stat_d().

#define S_ISLNK | ( |  | m | ) | (0)

Definition at line 1253 of file dir.c.

Referenced by file_expand_path(), glob_helper(), rb_file_ftype(), rb_file_symlink_p(), rb_stat_l(), and realpath_rec().

#define STRUCT_DIRENT | ( |  | entry | ) | (entry)

Definition at line 558 of file dir.c.

Referenced by dir_each(), dir_read(), and glob_helper().

#define sys_warning | ( |  | val | ) | (void)((flags & GLOB_VERBOSE) && rb_protect(sys_warning_1, (VALUE)(val), 0))

Definition at line 1002 of file dir.c.

Referenced by do_lstat(), do_opendir(), and do_stat().

#define to_be_ignored | ( |  | e | ) | ((e) == ENOENT || (e) == ENOTDIR)

Definition at line 1014 of file dir.c.

Referenced by do_lstat(), do_opendir(), and do_stat().

#define UNESCAPE | ( |  | p | ) | (escape && *(p) == '\\' ? (p) + 1 : (p))

Definition at line 170 of file dir.c.

Referenced by fnmatch_helper().

## Enumeration Type Documentation

enum answer

Enumerator:

  YES |
  NO |
  UNKNOWN |

Definition at line 1245 of file dir.c.

enum glob_pattern_type

Enumerator:

  PLAIN |
  MAGICAL |
  RECURSIVE |
  MATCH_ALL |
  MATCH_DIR |

Definition at line 1141 of file dir.c.

## Function Documentation

static char* bracket | ( | const char * | p,
|  | const char * | pend,
|  | const char * | s,
|  | const char * | send,
|  | int | flags,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 97 of file dir.c.

References FNM_CASEFOLD, FNM_NOESCAPE, memcmp(), NULL, rb_enc_codepoint, rb_enc_mbclen(), and rb_enc_toupper().

Referenced by fnmatch_helper().

static VALUE chdir_restore | ( | struct chdir_data * | args | ) | `[static]`

Definition at line 783 of file dir.c.

References dir_chdir(), chdir_data::done, chdir_data::old_path, and Qnil.

Referenced by dir_s_chdir().

static VALUE chdir_yield | ( | struct chdir_data * | args | ) | `[static]`

Definition at line 772 of file dir.c.

References dir_chdir(), chdir_data::done, chdir_data::new_path, Qnil, rb_thread_current(), rb_yield(), and TRUE.

Referenced by dir_s_chdir().

static void check_dirname | ( | volatile VALUE * | dir | ) | `[static]`

Definition at line 903 of file dir.c.

References FilePathValue, rb_path_end(), rb_path_skip_prefix(), rb_secure(), rb_str_new(), and RSTRING_PTR.

Referenced by dir_s_mkdir(), and dir_s_rmdir().

static void dir_chdir | ( | VALUE | path | ) | `[static]`

Definition at line 756 of file dir.c.

References rb_str_encode_ospath(), rb_sys_fail(), and RSTRING_PTR.

Referenced by chdir_restore(), chdir_yield(), and dir_s_chdir().

static struct dir_data* dir_check | ( | VALUE | dir | ) | `[static, read]`

Definition at line 463 of file dir.c.

References dir_data::dir, dir_closed(), dir_data_type, OBJ_UNTRUSTED, rb_check_frozen(), rb_check_typeddata(), rb_eSecurityError, rb_raise(), and rb_safe_level.

static VALUE dir_close | ( | VALUE | dir | ) | `[static]`

Definition at line 744 of file dir.c.

References closedir, dir_data::dir, GetDIR, NULL, and Qnil.

Referenced by dir_entries(), dir_foreach(), dir_s_open(), and Init_Dir().

static void dir_closed | ( | void |  | ) | `[static]`

Definition at line 457 of file dir.c.

References rb_eIOError, and rb_raise().

Referenced by dir_check(), and dir_each().

static VALUE dir_each | ( | VALUE | dir | ) | `[static]`

Definition at line 615 of file dir.c.

References DEFINE_STRUCT_DIRENT, dir_data::dir, dir_closed(), dirent, dp, dir_data::enc, GetDIR, IF_HAVE_READDIR_R, NAMLEN, NULL, rb_external_str_new_with_enc(), rb_yield(), READDIR, RETURN_ENUMERATOR, rewinddir, and STRUCT_DIRENT.

Referenced by dir_foreach(), and Init_Dir().

static VALUE dir_entries | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | io
| ) |  | `[static]`

Definition at line 1877 of file dir.c.

References dir_data::dir, dir_close(), dir_open_dir(), rb_Array(), and rb_ensure().

Referenced by Init_Dir().

static VALUE dir_foreach | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | io
| ) |  | `[static]`

Definition at line 1855 of file dir.c.

References dir_data::dir, dir_close(), dir_each(), dir_open_dir(), Qnil, rb_ensure(), and RETURN_ENUMERATOR.

Referenced by Init_Dir().

static void dir_free | ( | void * | ptr | ) | `[static]`

Definition at line 332 of file dir.c.

References closedir, dir_data::dir, and xfree().

static VALUE dir_globs | ( | long | argc,
|  | VALUE * | argv,
|  | int | flags
| ) |  | `[static]`

Definition at line 1695 of file dir.c.

References argc, GLOB_JUMP_TAG, GlobPathValue, push_glob(), rb_ary_new(), and TRUE.

Referenced by dir_s_aref(), and dir_s_glob().

static VALUE dir_initialize | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | dir
| ) |  | `[static]`

Definition at line 383 of file dir.c.

References closedir, dir_data::dir, dir_data_type, dp, dir_data::enc, errno, FALSE, GlobPathValue, ID2SYM, NIL_P, NULL, opendir, dir_data::path, Qnil, rb_convert_type(), rb_filesystem_encoding(), rb_gc(), rb_hash_aref(), rb_intern, rb_scan_args(), rb_str_dup_frozen(), rb_sys_fail(), rb_to_encoding(), RSTRING_PTR, T_HASH, and TypedData_Get_Struct.

Referenced by dir_s_open(), and Init_Dir().

static VALUE dir_inspect | ( | VALUE | dir | ) | `[static]`

Definition at line 484 of file dir.c.

References dir_data_type, NIL_P, dir_data::path, rb_funcall(), rb_intern, rb_obj_classname(), rb_sprintf(), RSTRING_PTR, and TypedData_Get_Struct.

Referenced by Init_Dir().

static void dir_mark | ( | void * | ptr | ) | `[static]`

Definition at line 325 of file dir.c.

References dir_data::dir, dir_data::path, and rb_gc_mark().

static size_t dir_memsize | ( | const void * | ptr | ) | `[static]`

Definition at line 342 of file dir.c.

static VALUE dir_open_dir | ( | int | argc,
|  | VALUE * | argv
| ) |  | `[static]`

Definition at line 1824 of file dir.c.

References dir_data::dir, dir_data_type, rb_cDir, rb_funcall2(), rb_intern, and TypedData_Get_Struct.

Referenced by dir_entries(), and dir_foreach().

static VALUE dir_path | ( | VALUE | dir | ) | `[static]`

Definition at line 506 of file dir.c.

References dir_data_type, NIL_P, dir_data::path, Qnil, rb_str_dup(), and TypedData_Get_Struct.

Referenced by Init_Dir().

static VALUE dir_read | ( | VALUE | dir | ) | `[static]`

Definition at line 574 of file dir.c.

References DEFINE_STRUCT_DIRENT, dir_data::dir, dirent, dp, dir_data::enc, errno, GetDIR, IF_HAVE_READDIR_R, NAMLEN, Qnil, rb_external_str_new_with_enc(), rb_sys_fail(), READDIR, and STRUCT_DIRENT.

Referenced by Init_Dir().

static VALUE dir_rewind | ( | VALUE | dir | ) | `[static]`

Definition at line 721 of file dir.c.

References dir_data::dir, GetDIR, OBJ_UNTRUSTED, rb_eSecurityError, rb_raise(), rb_safe_level, and rewinddir.

Referenced by Init_Dir().

static VALUE dir_s_alloc | ( | VALUE | klass | ) | `[static]`

Definition at line 364 of file dir.c.

References dir_data::dir, dir_data_type, dir_data::enc, NULL, dir_data::path, Qnil, and TypedData_Make_Struct.

Referenced by Init_Dir().

static VALUE dir_s_aref | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  | `[static]`

Definition at line 1722 of file dir.c.

References dir_globs(), and rb_push_glob().

Referenced by Init_Dir().

static VALUE dir_s_chdir | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  | `[static]`

Definition at line 834 of file dir.c.

References chdir_restore(), chdir_yield(), dir_chdir(), chdir_data::done, FALSE, FilePathValue, getenv(), INT2FIX, my_getcwd, chdir_data::new_path, chdir_data::old_path, Qnil, rb_block_given_p(), rb_eArgError, rb_ensure(), rb_raise(), rb_scan_args(), rb_secure(), rb_str_new2(), rb_tainted_str_new2(), rb_thread_current(), rb_warn(), and xfree().

Referenced by Init_Dir().

static VALUE dir_s_getwd | ( | VALUE | dir | ) | `[static]`

Definition at line 897 of file dir.c.

References rb_dir_getwd().

Referenced by Init_Dir().

static VALUE dir_s_glob | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  | `[static]`

Definition at line 1797 of file dir.c.

References dir_globs(), NIL_P, NUM2INT, Qnil, RARRAY_LEN, RARRAY_PTR, rb_ary_each(), rb_block_given_p(), rb_check_array_type(), rb_push_glob(), and rb_scan_args().

Referenced by Init_Dir().

static VALUE dir_s_home | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  | `[static]`

Definition at line 1999 of file dir.c.

References NIL_P, rb_home_dir(), rb_scan_args(), rb_str_new(), SafeStringValue, and StringValueCStr.

Referenced by Init_Dir().

static VALUE dir_s_mkdir | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  | `[static]`

Definition at line 954 of file dir.c.

References check_dirname(), INT2FIX, NUM2INT, rb_scan_args(), rb_str_encode_ospath(), rb_sys_fail(), and RSTRING_PTR.

Referenced by Init_Dir().

static VALUE dir_s_open | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | klass
| ) |  | `[static]`

Definition at line 443 of file dir.c.

References dir_data::dir, dir_close(), dir_data_type, dir_initialize(), dp, rb_block_given_p(), rb_ensure(), rb_yield(), and TypedData_Make_Struct.

Referenced by Init_Dir().

static VALUE dir_s_rmdir | ( | VALUE | obj,
|  | VALUE | dir
| ) |  | `[static]`

Definition at line 984 of file dir.c.

References check_dirname(), INT2FIX, rb_str_encode_ospath(), rb_sys_fail(), and RSTRING_PTR.

Referenced by Init_Dir().

static VALUE dir_set_pos | ( | VALUE | dir,
|  | VALUE | pos
| ) |  | `[static]`

Definition at line 703 of file dir.c.

References dir_seek.

Referenced by Init_Dir().

static int do_lstat | ( | const char * | path,
|  | struct stat * | pst,
|  | int | flags
| ) |  | `[static]`

Definition at line 1029 of file dir.c.

References errno, lstat, sys_warning, and to_be_ignored.

Referenced by glob_helper().

static DIR* do_opendir | ( | const char * | path,
|  | int | flags
| ) |  | `[static]`

Definition at line 1039 of file dir.c.

References errno, NULL, opendir, sys_warning, and to_be_ignored.

Referenced by glob_helper().

static int do_stat | ( | const char * | path,
|  | struct stat * | pst,
|  | int | flags
| ) |  | `[static]`

Definition at line 1018 of file dir.c.

References errno, stat, sys_warning, and to_be_ignored.

Referenced by glob_helper().

static VALUE file_s_fnmatch | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  | `[static]`

Definition at line 1967 of file dir.c.

References FilePathStringValue, fnmatch(), NUM2INT, dir_data::path, Qfalse, Qtrue, rb_enc_get(), rb_scan_args(), RSTRING_PTR, and StringValue.

Referenced by Init_Dir().

static char* find_dirsep | ( | const char * | p,
|  | const char * | pend,
|  | int | flags,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 1082 of file dir.c.

References FNM_NOESCAPE, and Next.

Referenced by glob_make_pattern().

static int fnmatch | ( | const char * | pattern,
|  | rb_encoding * | enc,
|  | const char * | string,
|  | int | flags
| ) |  | `[static]`

Definition at line 267 of file dir.c.

References FNM_DOTMATCH, FNM_NOMATCH, FNM_PATHNAME, fnmatch_helper(), and Inc.

Referenced by file_s_fnmatch(), and glob_helper().

static int fnmatch_helper | ( | const char ** | pcur,
|  | const char ** | scur,
|  | int | flags,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 175 of file dir.c.

References bracket(), FNM_CASEFOLD, FNM_DOTMATCH, FNM_NOESCAPE, FNM_NOMATCH, FNM_PATHNAME, Inc, ISEND, MBCLEN_CHARFOUND_P, memcmp(), rb_enc_codepoint, rb_enc_precise_mbclen(), rb_enc_toupper(), RETURN, and UNESCAPE.

Referenced by fnmatch().

char* getenv | ( |  | ) |

Referenced by CONF_get1_default_config_file(), dir_s_chdir(), dln_find_1(), dln_find_exe_r(), do_spawn(), env_assoc(), env_delete(), env_fetch(), env_has_key(), env_shift(), establishShell(), etc_getlogin(), getaddrinfo(), main(), nl_langinfo_codeset(), process_options(), rb_env_path_tainted(), rb_f_getenv(), rb_home_dir(), rb_strftime_with_timespec(), rb_w32_aspawn(), rb_w32_spawn(), ruby_init_loadpath_safe(), and st_init_table_with_size().

static int glob_brace | ( | const char * | path,
|  | VALUE | val,
|  | void * | enc
| ) |  | `[static]`

Definition at line 1619 of file dir.c.

References brace_args::flags, brace_args::func, ruby_glob0(), and brace_args::value.

Referenced by ruby_brace_glob0().

static void glob_free_pattern | ( | struct glob_pattern * | list | ) | `[static]`

Definition at line 1217 of file dir.c.

References GLOB_FREE, list, glob_pattern::next, and glob_pattern::str.

Referenced by glob_make_pattern(), and ruby_glob0().

static VALUE glob_func_caller | ( | VALUE | val | ) | `[static]`

Definition at line 1267 of file dir.c.

References glob_args::enc, glob_args::func, glob_args::path, Qnil, and glob_args::value.

Referenced by rb_glob_caller().

static int glob_helper | ( | const char * | path,
|  | int | dirsep,
|  | enum answer | exist,
|  | enum answer | isdir,
|  | struct glob_pattern ** | beg,
|  | struct glob_pattern ** | end,
|  | int | flags,
|  | ruby_glob_func * | func,
|  | VALUE | arg,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 1278 of file dir.c.

References buf, closedir, DEFINE_STRUCT_DIRENT, dirent, do_lstat(), do_opendir(), do_stat(), dp, FNM_NOESCAPE, fnmatch(), GLOB_ALLOC_N, glob_call_func, GLOB_FREE, IF_HAVE_READDIR_R, join_path(), len, MAGICAL, MATCH_ALL, MATCH_DIR, name, glob_pattern::next, NO, NULL, PLAIN, rb_bug(), rb_usascii_encoding(), READDIR, RECURSIVE, remove_backslashes(), S_ISDIR, S_ISLNK, stat, glob_pattern::str, STRUCT_DIRENT, glob_pattern::type, UNKNOWN, and YES.

Referenced by ruby_glob0().

static struct glob_pattern* glob_make_pattern | ( | const char * | p,
|  | const char * | e,
|  | int | flags,
|  | rb_encoding * | enc
| ) |  | `[static, read]`

Definition at line 1152 of file dir.c.

References buf, find_dirsep(), GLOB_ALLOC, GLOB_ALLOC_N, GLOB_FREE, glob_free_pattern(), has_magic(), list, MAGICAL, MATCH_ALL, MATCH_DIR, glob_pattern::next, PLAIN, RECURSIVE, glob_pattern::str, and glob_pattern::type.

Referenced by ruby_glob0().

static int has_magic | ( | const char * | p,
|  | const char * | pend,
|  | int | flags,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 1050 of file dir.c.

References FNM_CASEFOLD, FNM_NOESCAPE, FNM_SYSCASE, ISALPHA, and Next.

Referenced by glob_make_pattern().

void Init_Dir | ( | void |  | ) |

Definition at line 2024 of file dir.c.

References dir_close(), dir_each(), dir_entries(), dir_foreach(), dir_initialize(), dir_inspect(), dir_path(), dir_read(), dir_rewind(), dir_s_alloc(), dir_s_aref(), dir_s_chdir(), dir_s_chroot, dir_s_getwd(), dir_s_glob(), dir_s_home(), dir_s_mkdir(), dir_s_open(), dir_s_rmdir(), dir_seek, dir_set_pos(), dir_tell, file_s_fnmatch(), FNM_CASEFOLD, FNM_DOTMATCH, FNM_NOESCAPE, FNM_PATHNAME, FNM_SYSCASE, INT2FIX, rb_cDir, rb_cFile, rb_cObject, rb_define_alloc_func(), rb_define_class(), rb_define_method(), rb_define_singleton_method(), rb_file_const(), rb_file_directory_p(), rb_include_module(), and rb_mEnumerable.

static char* join_path | ( | const char * | path,
|  | int | dirsep,
|  | const char * | name
| ) |  | `[static]`

Definition at line 1229 of file dir.c.

References buf, GLOB_ALLOC_N, len, and strlcat().

Referenced by glob_helper().

static int push_glob | ( | VALUE | ary,
|  | VALUE | str,
|  | int | flags
| ) |  | `[static]`

Definition at line 1652 of file dir.c.

References glob_args::enc, glob_args::func, GLOB_VERBOSE, push_pattern(), rb_enc_get(), rb_filesystem_encoding(), RB_GC_GUARD, rb_glob_caller(), rb_usascii_encoding(), RSTRING_PTR, ruby_brace_glob0(), and glob_args::value.

Referenced by dir_globs(), and rb_push_glob().

static void push_pattern | ( | const char * | path,
|  | VALUE | ary,
|  | void * | enc
| ) |  | `[static]`

Definition at line 1548 of file dir.c.

References rb_ary_push(), and rb_external_str_new_with_enc().

Referenced by push_glob().

VALUE rb_dir_getwd | ( | void |  | ) |

Definition at line 871 of file dir.c.

References my_getcwd, rb_enc_associate(), rb_filesystem_encoding(), rb_secure(), rb_tainted_str_new2(), and xfree().

Referenced by dir_s_getwd(), and rb_realpath_internal().

void rb_glob | ( | const char * | path,
|  | void(*)(const char *, VALUE, void *) | func,
|  | VALUE | arg
| ) |  |

Definition at line 1541 of file dir.c.

References func, GLOB_JUMP_TAG, rb_ascii8bit_encoding(), and rb_glob2().

static int rb_glob2 | ( | const char * | path,
|  | int | flags,
|  | void(*)(const char *, VALUE, void *) | func,
|  | VALUE | arg,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 1522 of file dir.c.

References glob_args::enc, FNM_SYSCASE, func, glob_args::func, GLOB_VERBOSE, rb_glob_caller(), rb_warning(), ruby_glob0(), and glob_args::value.

Referenced by rb_glob().

static int rb_glob_caller | ( | const char * | path,
|  | VALUE | a,
|  | void * | enc
| ) |  | `[static]`

Definition at line 1511 of file dir.c.

References glob_func_caller(), glob_args::path, and rb_protect().

Referenced by push_glob(), and rb_glob2().

VALUE rb_home_dir | ( | const char * | user,
|  | VALUE | result
| ) |  |

Definition at line 2806 of file file.c.

References buf, CharNext, getenv(), Qnil, rb_eArgError, rb_enc_associate_index(), rb_filesystem_encindex(), rb_raise(), rb_str_resize(), result, and RSTRING_PTR.

Referenced by dir_s_home(), and file_expand_path().

static VALUE rb_push_glob | ( | VALUE | str,
|  | int | flags
| ) |  | `[static]`

Definition at line 1668 of file dir.c.

References GLOB_JUMP_TAG, GlobPathValue, push_glob(), rb_ary_new(), rb_enc_get(), rb_enc_str_new(), RSTRING_LEN, RSTRING_PTR, and TRUE.

Referenced by dir_s_aref(), and dir_s_glob().

static void remove_backslashes | ( | char * | p,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 1117 of file dir.c.

References Inc, and memmove().

Referenced by glob_helper().

static int ruby_brace_expand | ( | const char * | str,
|  | int | flags,
|  | ruby_glob_func * | func,
|  | VALUE | arg,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 1554 of file dir.c.

References buf, glob_args::enc, FNM_NOESCAPE, GLOB_ALLOC_N, GLOB_FREE, Inc, len, shift(), and strlcpy().

Referenced by ruby_brace_glob0().

int ruby_brace_glob | ( | const char * | str,
|  | int | flags,
|  | ruby_glob_func * | func,
|  | VALUE | arg
| ) |  |

Definition at line 1639 of file dir.c.

References GLOB_VERBOSE, rb_ascii8bit_encoding(), and ruby_brace_glob0().

Referenced by cmdglob().

static int ruby_brace_glob0 | ( | const char * | str,
|  | int | flags,
|  | ruby_glob_func * | func,
|  | VALUE | arg,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 1627 of file dir.c.

References brace_args::flags, func, brace_args::func, glob_brace(), ruby_brace_expand(), and brace_args::value.

Referenced by push_glob(), ruby_brace_glob(), and ruby_brace_glob_with_enc().

int ruby_brace_glob_with_enc | ( | const char * | str,
|  | int | flags,
|  | ruby_glob_func * | func,
|  | VALUE | arg,
|  | rb_encoding * | enc
| ) |  |

Definition at line 1646 of file dir.c.

References GLOB_VERBOSE, and ruby_brace_glob0().

int ruby_glob | ( | const char * | path,
|  | int | flags,
|  | ruby_glob_func * | func,
|  | VALUE | arg
| ) |  |

Definition at line 1504 of file dir.c.

References GLOB_VERBOSE, rb_ascii8bit_encoding(), and ruby_glob0().

static int ruby_glob0 | ( | const char * | path,
|  | int | flags,
|  | ruby_glob_func * | func,
|  | VALUE | arg,
|  | rb_encoding * | enc
| ) |  | `[static]`

Definition at line 1469 of file dir.c.

References buf, FNM_SYSCASE, GLOB_ALLOC_N, GLOB_FREE, glob_free_pattern(), glob_helper(), glob_make_pattern(), list, MEMCPY, rb_path_skip_prefix(), and UNKNOWN.

Referenced by glob_brace(), rb_glob2(), and ruby_glob().

char* strchr | ( | char * | ,
|  | char |
| ) |  |

Referenced by check_exec_env_i(), dln_find_1(), env_each_pair(), env_has_value(), env_inspect(), env_key(), env_keys(), env_rassoc(), env_select(), env_shift(), env_to_a(), env_to_hash(), env_values(), getnameinfo(), io_encname_bom_p(), nl_langinfo_codeset(), pack_pack(), pack_unpack(), process_sflag(), rb_f_test(), rb_feature_provided(), rb_file_open_internal(), rb_io_extract_modeenc(), rb_io_mode_enc(), rb_num2long(), rb_num2ulong(), rb_path_check(), rb_proc_exec(), rb_strftime_with_timespec(), rb_w32_aspawn(), rb_w32_pipe(), rb_w32_spawn(), ruby_scan_hex(), ruby_setenv(), ruby_strtod(), and search_required().

static VALUE sys_warning_1 | ( | VALUE | mesg | ) | `[static]`

Definition at line 995 of file dir.c.

References Qnil, and rb_sys_warning().

## Variable Documentation

int chdir_blocking = 0`[static]`

Definition at line 763 of file dir.c.

VALUE chdir_thread = Qnil`[static]`

Definition at line 764 of file dir.c.

const rb_data_type_t dir_data_type`[static]`

Initial value:

     {
        "dir",
        dir_mark, dir_free, dir_memsize
    }

Definition at line 347 of file dir.c.

Referenced by dir_check(), dir_initialize(), dir_inspect(), dir_open_dir(), dir_path(), dir_s_alloc(), and dir_s_open().

VALUE rb_cDir

Definition at line 316 of file dir.c.

Referenced by dir_open_dir(), and Init_Dir().