Changeset View
Changeset View
Standalone View
Standalone View
sys/libkern/iconv.c
Show All 12 Lines | |||||
sx_sunlock(&iconv_lock); | sx_sunlock(&iconv_lock); | ||||
if (error) | if (error) | ||||
return error; | return error; | ||||
spc = 0; | spc = 0; | ||||
error = SYSCTL_OUT(req, &spc, sizeof(spc)); | error = SYSCTL_OUT(req, &spc, sizeof(spc)); | ||||
return error; | return error; | ||||
} | } | ||||
SYSCTL_PROC(_kern_iconv, OID_AUTO, drvlist, CTLFLAG_RD | CTLTYPE_OPAQUE, | SYSCTL_PROC(_kern_iconv, OID_AUTO, drvlist, | ||||
NULL, 0, iconv_sysctl_drvlist, "S,xlat", "registered converters"); | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, | ||||
NULL, 0, iconv_sysctl_drvlist, "S,xlat", | |||||
"registered converters"); | |||||
/* | /* | ||||
* List all available charset pairs. | * List all available charset pairs. | ||||
*/ | */ | ||||
static int | static int | ||||
iconv_sysctl_cslist(SYSCTL_HANDLER_ARGS) | iconv_sysctl_cslist(SYSCTL_HANDLER_ARGS) | ||||
{ | { | ||||
struct iconv_cspair *csp; | struct iconv_cspair *csp; | ||||
Show All 13 Lines | |||||
error = SYSCTL_OUT(req, &csi, sizeof(csi)); | error = SYSCTL_OUT(req, &csi, sizeof(csi)); | ||||
if (error) | if (error) | ||||
break; | break; | ||||
} | } | ||||
sx_sunlock(&iconv_lock); | sx_sunlock(&iconv_lock); | ||||
return error; | return error; | ||||
} | } | ||||
SYSCTL_PROC(_kern_iconv, OID_AUTO, cslist, CTLFLAG_RD | CTLTYPE_OPAQUE, | SYSCTL_PROC(_kern_iconv, OID_AUTO, cslist, | ||||
NULL, 0, iconv_sysctl_cslist, "S,xlat", "registered charset pairs"); | CTLFLAG_RD | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, | ||||
NULL, 0, iconv_sysctl_cslist, "S,xlat", | |||||
"registered charset pairs"); | |||||
int | int | ||||
iconv_add(const char *converter, const char *to, const char *from) | iconv_add(const char *converter, const char *to, const char *from) | ||||
{ | { | ||||
struct iconv_converter_class *dcp; | struct iconv_converter_class *dcp; | ||||
struct iconv_cspair *csp; | struct iconv_cspair *csp; | ||||
if (iconv_lookupconv(converter, &dcp) != 0) | if (iconv_lookupconv(converter, &dcp) != 0) | ||||
Show All 24 Lines | |||||
ICDEBUG("%s => %s, %d bytes\n",din.ia_from, din.ia_to, din.ia_datalen); | ICDEBUG("%s => %s, %d bytes\n",din.ia_from, din.ia_to, din.ia_datalen); | ||||
return 0; | return 0; | ||||
bad: | bad: | ||||
iconv_unregister_cspair(csp); | iconv_unregister_cspair(csp); | ||||
sx_xunlock(&iconv_lock); | sx_xunlock(&iconv_lock); | ||||
return error; | return error; | ||||
} | } | ||||
SYSCTL_PROC(_kern_iconv, OID_AUTO, add, CTLFLAG_RW | CTLTYPE_OPAQUE, | SYSCTL_PROC(_kern_iconv, OID_AUTO, add, | ||||
NULL, 0, iconv_sysctl_add, "S,xlat", "register charset pair"); | CTLFLAG_RW | CTLTYPE_OPAQUE | CTLFLAG_NEEDGIANT, | ||||
NULL, 0, iconv_sysctl_add, "S,xlat", | |||||
"register charset pair"); | |||||
/* | /* | ||||
* Default stubs for converters | * Default stubs for converters | ||||
*/ | */ | ||||
int | int | ||||
iconv_converter_initstub(struct iconv_converter_class *dp) | iconv_converter_initstub(struct iconv_converter_class *dp) | ||||
{ | { | ||||
return 0; | return 0; | ||||
Show All 12 Lines |