/* for encdb.h * Set base encoding for encodings which are not replicas * but not in their own files. */ void rb_enc_set_base(const char *name, const char *orig) { int idx = rb_enc_registered(name); int origidx = rb_enc_registered(orig); set_base_encoding(idx, rb_enc_from_index(origidx)); }
int rb_encdb_replicate(const char *name, const char *orig) { int origidx = rb_enc_registered(orig); int idx = rb_enc_registered(name); if (origidx < 0) { origidx = enc_register(orig, 0); } return enc_replicate_with_index(name, rb_enc_from_index(origidx), idx); }
static int load_encoding(const char *name) { VALUE enclib = rb_sprintf("enc/%s.so", name); VALUE verbose = ruby_verbose; VALUE debug = ruby_debug; VALUE loaded; char *s = RSTRING_PTR(enclib) + 4, *e = RSTRING_END(enclib) - 3; int idx; while (s < e) { if (!ISALNUM(*s)) *s = '_'; else if (ISUPPER(*s)) *s = TOLOWER(*s); ++s; } OBJ_FREEZE(enclib); ruby_verbose = Qfalse; ruby_debug = Qfalse; loaded = rb_protect(require_enc, enclib, 0); ruby_verbose = verbose; ruby_debug = debug; rb_set_errinfo(Qnil); if (NIL_P(loaded)) return -1; if ((idx = rb_enc_registered(name)) < 0) return -1; if (enc_autoload_p(enc_table.list[idx].enc)) return -1; return idx; }
static void enc_check_duplication(const char *name) { if (rb_enc_registered(name) >= 0) { rb_raise(rb_eArgError, "encoding %s is already registered", name); } }
static int load_encoding(const char *name) { VALUE enclib = rb_sprintf("enc/%s.so", name); VALUE verbose = ruby_verbose; VALUE debug = ruby_debug; VALUE errinfo; char *s = RSTRING_PTR(enclib) + 4, *e = RSTRING_END(enclib) - 3; int loaded; int idx; while (s < e) { if (!ISALNUM(*s)) *s = '_'; else if (ISUPPER(*s)) *s = (char)TOLOWER(*s); ++s; } FL_UNSET(enclib, FL_TAINT); enclib = rb_fstring(enclib); ruby_verbose = Qfalse; ruby_debug = Qfalse; errinfo = rb_errinfo(); loaded = rb_require_internal(enclib, rb_safe_level()); ruby_verbose = verbose; ruby_debug = debug; rb_set_errinfo(errinfo); if (loaded < 0 || 1 < loaded) return -1; if ((idx = rb_enc_registered(name)) < 0) return -1; if (enc_autoload_p(enc_table.list[idx].enc)) return -1; return idx; }
int rb_filesystem_encindex(void) { int idx = rb_enc_registered("filesystem"); if (idx < 0) idx = rb_ascii8bit_encindex(); return idx; }
int rb_filesystem_encindex(void) { int idx = rb_enc_registered("filesystem"); if (idx < 0) idx = ENCINDEX_ASCII; return idx; }
void rb_encdb_declare(const char *name) { int idx = rb_enc_registered(name); if (idx < 0) { idx = enc_register(name, 0); } set_encoding_const(name, rb_enc_from_index(idx)); }
int rb_encdb_alias(const char *alias, const char *orig) { int idx = rb_enc_registered(orig); if (idx < 0) { idx = enc_register(orig, 0); } return enc_alias(alias, idx); }
int rb_encdb_dummy(const char *name) { int index = enc_replicate_with_index(name, rb_ascii8bit_encoding(), rb_enc_registered(name)); rb_encoding *enc = enc_table.list[index].enc; ENC_SET_DUMMY(enc); return index; }
int rb_locale_encindex(void) { VALUE charmap = rb_locale_charmap(rb_cEncoding); int idx; if (NIL_P(charmap)) idx = rb_usascii_encindex(); else if ((idx = rb_enc_find_index(StringValueCStr(charmap))) < 0) idx = rb_ascii8bit_encindex(); if (rb_enc_registered("locale") < 0) enc_alias_internal("locale", idx); return idx; }
int rb_locale_encindex(void) { int idx = rb_locale_charmap_index(); if (idx < 0) idx = ENCINDEX_ASCII; if (rb_enc_registered("locale") < 0) { # if defined _WIN32 void Init_w32_codepage(void); Init_w32_codepage(); # endif enc_alias_internal("locale", idx); } return idx; }
static int rb_filesystem_encindex(void) { int idx; #if defined NO_LOCALE_CHARMAP idx = rb_enc_to_index(rb_default_external_encoding()); #elif defined _WIN32 || defined __CYGWIN__ char cp[sizeof(int) * 8 / 3 + 4]; snprintf(cp, sizeof cp, "CP%d", AreFileApisANSI() ? GetACP() : GetOEMCP()); idx = rb_enc_find_index(cp); if (idx < 0) idx = rb_ascii8bit_encindex(); #elif defined __APPLE__ idx = rb_utf8_encindex(); #else idx = rb_locale_encindex(); #endif if (rb_enc_registered("filesystem") < 0) enc_alias_internal("filesystem", idx); return idx; }
int rb_locale_encindex(void) { VALUE charmap = rb_locale_charmap(rb_cEncoding); int idx; if (NIL_P(charmap)) idx = ENCINDEX_US_ASCII; else if ((idx = rb_enc_find_index(StringValueCStr(charmap))) < 0) idx = ENCINDEX_ASCII; if (rb_enc_registered("locale") < 0) { # if defined _WIN32 void Init_w32_codepage(void); Init_w32_codepage(); # endif enc_alias_internal("locale", idx); } return idx; }
int rb_enc_find_index(const char *name) { int i = rb_enc_registered(name); rb_encoding *enc; if (i < 0) { i = load_encoding(name); } else if (!(enc = rb_enc_from_index(i))) { if (i != UNSPECIFIED_ENCODING) { rb_raise(rb_eArgError, "encoding %s is not registered", name); } } else if (enc_autoload_p(enc)) { if (enc_autoload(enc) < 0) { rb_warn("failed to load encoding (%s); use ASCII-8BIT instead", name); return 0; } } return i; }
int rb_enc_register(const char *name, rb_encoding *encoding) { int index = rb_enc_registered(name); if (index >= 0) { rb_encoding *oldenc = rb_enc_from_index(index); if (STRCASECMP(name, rb_enc_name(oldenc))) { index = enc_register(name, encoding); } else if (enc_autoload_p(oldenc) || !ENC_DUMMY_P(oldenc)) { enc_register_at(index, name, encoding); } else { rb_raise(rb_eArgError, "encoding %s is already registered", name); } } else { index = enc_register(name, encoding); set_encoding_const(name, rb_enc_from_index(index)); } return index; }