int ncp_initlib(void){ int error; size_t len = sizeof(sysentoffset); int kv; size_t kvlen = sizeof(kv); static int ncp_initialized; if (ncp_initialized) return 0; error = sysctlbyname("net.ncp.sysent", &sysentoffset, &len, NULL, 0); if (error) { fprintf(stderr, "%s: can't find kernel module\n", __func__); return error; } error = sysctlbyname("net.ncp.version", &kv, &kvlen, NULL, 0); if (error) { fprintf(stderr, "%s: kernel module is old, please recompile it.\n", __func__); return error; } if (NCP_VERSION != kv) { fprintf(stderr, "%s: kernel module version(%d) don't match library(%d).\n", __func__, kv, NCP_VERSION); return EINVAL; } if ((error = ncp_nls_setrecode(0)) != 0) { fprintf(stderr, "%s: can't initialise recode\n", __func__); return error; } if ((error = ncp_nls_setlocale("")) != 0) { fprintf(stderr, "%s: can't initialise locale\n", __func__); return error; } ncp_initialized++; return 0; }
int ncp_nls_setrecode(int scheme) { struct ncp_nlsdesc *nd; if (scheme == 0) { #if NCP_NLS_DEFAULT scheme = NCP_NLS_DEFAULT; #else scheme = NCP_NLS_AS_IS; #endif } for (nd = ncp_nlslist; nd->name; nd++) { if (nd->scheme != scheme) continue; ncp_nls.u2n = nd->nls.u2n; ncp_nls.n2u = nd->nls.n2u; return ncp_nls_setlocale(""); } fprintf(stderr, "Character conversion scheme %d was not compiled in\n", scheme); return EINVAL; }