Exemple #1
0
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);
}
Exemple #2
0
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 */
}
Exemple #3
0
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);
}
Exemple #4
0
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);
		}
	}
}
Exemple #5
0
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);
}
Exemple #6
0
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);
}
Exemple #7
0
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);
}