new(p1, p2 = {})
  public
  
    
    
Returns a new directory object for the
named directory.
   
  
    Show source    
    
      static VALUE
dir_initialize(int argc, VALUE *argv, VALUE dir)
{
    struct dir_data *dp;
    rb_encoding  *fsenc;
    VALUE dirname, opt, orig;
    static VALUE sym_enc;
    if (!sym_enc) {
        sym_enc = ID2SYM(rb_intern("encoding"));
    }
    fsenc = rb_filesystem_encoding();
    argc = rb_scan_args(argc, argv, "1:", &dirname, &opt);
    if (!NIL_P(opt)) {
        VALUE enc = rb_hash_aref(opt, sym_enc);
        if (!NIL_P(enc)) {
            fsenc = rb_to_encoding(enc);
        }
    }
    GlobPathValue(dirname, FALSE);
    orig = rb_str_dup_frozen(dirname);
    dirname = rb_str_encode_ospath(dirname);
    dirname = rb_str_dup_frozen(dirname);
    TypedData_Get_Struct(dir, struct dir_data, &dir_data_type, dp);
    if (dp->dir) closedir(dp->dir);
    dp->dir = NULL;
    dp->path = Qnil;
    dp->enc = fsenc;
    dp->dir = opendir(RSTRING_PTR(dirname));
    if (dp->dir == NULL) {
        if (errno == EMFILE || errno == ENFILE) {
            rb_gc();
            dp->dir = opendir(RSTRING_PTR(dirname));
        }
        if (dp->dir == NULL) {
            rb_sys_fail_path(orig);
        }
    }
    dp->path = orig;
    return dir;
}