idn_result_t idn_resconf_setauxidnconvertername(idn_resconf_t ctx, const char *name, int flags) { idn_converter_t aux_idn_converter; const char *old_name; idn_result_t r; assert(ctx != NULL && name != NULL); TRACE(("idn_resconf_setauxidnconvertername(name=%s, flags=%d)\n", name, flags)); if (ctx->aux_idn_converter != NULL) { old_name = idn_converter_localencoding(ctx->aux_idn_converter); if (old_name != NULL && strcmp(old_name, name) == 0) return (idn_success); } r = idn_converter_create(name, &aux_idn_converter, flags); if (r != idn_success) return (r); if (ctx->aux_idn_converter != NULL) idn_converter_destroy(ctx->aux_idn_converter); ctx->aux_idn_converter = aux_idn_converter; return (idn_success); }
idn_result_t idn_resconf_setlocalconvertername(idn_resconf_t ctx, const char *name, int flags) { #ifdef WITHOUT_ICONV return idn_failure; #else /* WITHOUT_ICONV */ idn_converter_t local_converter; idn_result_t r; assert(ctx != NULL); TRACE(("idn_resconf_setlocalconvertername(name=%s, flags=%d)\n", name == NULL ? "<null>" : name, flags)); if (ctx->local_converter != NULL) { idn_converter_destroy(ctx->local_converter); ctx->local_converter = NULL; } ctx->local_converter_is_static = 0; if (name != NULL) { r = idn_converter_create(name, &local_converter, flags); if (r != idn_success) return (r); ctx->local_converter = local_converter; ctx->local_converter_is_static = 1; } return (idn_success); #endif /* WITHOUT_ICONV */ }
static idn_result_t setdefaults_body(idn_resconf_t ctx, int conf_mask) { idn_result_t r; TRACE(("setdefaults_body()\n")); assert(ctx != NULL); if (!(conf_mask & DEFAULT_CONF_NAMEPREP)) { TRACE(("set default nameprep\n")); r = idn_resconf_setnameprepversion(ctx, IDN_NAMEPREP_CURRENT); if (r != idn_success) { return (r); } } if (!(conf_mask & DEFAULT_CONF_IDN_ENCODING)) { TRACE(("set default idn encoding\n")); r = idn_converter_create(IDN_ENCODING_CURRENT, &ctx->idn_converter, IDN_CONVERTER_DELAYEDOPEN | IDN_CONVERTER_RTCHECK); if (r != idn_success) { ERROR(("libidnkit: cannot create idn converter, %s\n", idn_result_tostring(r))); return (r); } } return (idn_success); }
void sjis_check(void) { idn_result_t r; idn_converter_t sjis_ctx = NULL; r = idn_nameinit(0); if (r != idn_success) { fprintf(stderr, "idn_nameinit(): failed\n"); exit (1); } r = idn_converter_create(SJIS_ENCODING_NAME, &sjis_ctx, 0); if (sjis_ctx != NULL) { idn_converter_destroy(sjis_ctx); } if (r != idn_success) { if (r == idn_invalid_name) { fprintf(stderr, \ "\"%s\" is invalid codeset name, edit codeset.h\n", \ SJIS_ENCODING_NAME); exit (1); } else { fprintf(stderr, \ "idn_converter_create() failed with error \"%s\"\n", \ idn_result_tostring(r)); exit (1); } } }
static idn_result_t update_local_converter(idn_resconf_t ctx) { idn_result_t r; const char *old_encoding; const char *new_encoding; /* * We don't update local converter, if the converter is set * by idn_resconf_setlocalconverter() or * idn_resconf_setlocalconvertername(). */ if (ctx->local_converter_is_static) return (idn_success); /* * Update the local converter if the local encoding is changed. */ old_encoding = (ctx->local_converter != NULL) ? idn_converter_localencoding(ctx->local_converter) : NULL; new_encoding = idn_localencoding_name(); if (new_encoding == NULL) { ERROR(("cannot determine local codeset name\n")); return (idn_notfound); } if (old_encoding != NULL && new_encoding != NULL && strcmp(old_encoding, new_encoding) == 0) { return (idn_success); } if (ctx->local_converter != NULL) { idn_converter_destroy(ctx->local_converter); ctx->local_converter = NULL; } r = idn_converter_create(new_encoding, &ctx->local_converter, IDN_CONVERTER_RTCHECK); return (r); }
idn_result_t idn_resconf_setidnconvertername(idn_resconf_t ctx, const char *name, int flags) { idn_converter_t idn_converter; idn_result_t r; assert(ctx != NULL && name != NULL); TRACE(("idn_resconf_setidnconvertername(name=%s, flags=%d)\n", name, flags)); r = idn_converter_create(name, &idn_converter, flags); if (r != idn_success) return (r); if (ctx->idn_converter != NULL) idn_converter_destroy(ctx->idn_converter); ctx->idn_converter = idn_converter; return (idn_success); }
static idn_result_t parse_idn_encoding(idn_resconf_t ctx, char *args, int lineno) { idn_result_t r; char *argv[MAX_CONF_LINE_ARGS + 1]; int argc; argc = split_args(args, argv, MAX_CONF_LINE_ARGS + 1); if (argc != 1) { ERROR(("libidnkit: wrong # of args for idn-encoding, " "line %d\n", lineno)); return (idn_invalid_syntax); } r = idn_converter_create(argv[0], &ctx->idn_converter, IDN_CONVERTER_DELAYEDOPEN | IDN_CONVERTER_RTCHECK); if (r != idn_success) { ERROR(("libidnkit: cannot create idn converter, %s, " "line %d\n", idn_result_tostring(r), lineno)); } return (r); }