Author: jelmer Date: 2007-12-06 17:16:40 +0000 (Thu, 06 Dec 2007) New Revision: 26315
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26315 Log: Avoid using lp_ functions in libcharset. Modified: branches/SAMBA_4_0/ branches/SAMBA_4_0/source/lib/charset/charcnv.c branches/SAMBA_4_0/source/lib/charset/iconv.c branches/SAMBA_4_0/source/lib/charset/tests/iconv.c branches/SAMBA_4_0/source/param/param.h branches/SAMBA_4_0/source/param/util.c branches/SAMBA_4_0/source/torture/smbiconv.c Changeset: Property changes on: branches/SAMBA_4_0 ___________________________________________________________________ Name: bzr:revision-info ...skipped... Name: bzr:revision-id:v3-trunk0 ...skipped... Modified: branches/SAMBA_4_0/source/lib/charset/charcnv.c =================================================================== --- branches/SAMBA_4_0/source/lib/charset/charcnv.c 2007-12-06 17:04:11 UTC (rev 26314) +++ branches/SAMBA_4_0/source/lib/charset/charcnv.c 2007-12-06 17:16:40 UTC (rev 26315) @@ -42,12 +42,11 @@ const char *unix_charset; const char *dos_charset; const char *display_charset; + bool native_iconv; smb_iconv_t conv_handles[NUM_CHARSETS][NUM_CHARSETS]; }; -static struct smb_iconv_convenience *global_smb_iconv_convenience = NULL; - /** * Return the name of a charset to give to iconv(). **/ @@ -86,32 +85,28 @@ } struct smb_iconv_convenience *smb_iconv_convenience_init(TALLOC_CTX *mem_ctx, - struct loadparm_context *lp_ctx) + const char *dos_charset, + const char *unix_charset, + const char *display_charset, + bool native_iconv) { struct smb_iconv_convenience *ret = talloc_zero(mem_ctx, - struct smb_iconv_convenience); + struct smb_iconv_convenience); + if (ret == NULL) { + return NULL; + } + talloc_set_destructor(ret, close_iconv); - ret->display_charset = talloc_strdup(ret, lp_display_charset(lp_ctx)); - ret->dos_charset = talloc_strdup(ret, lp_dos_charset(lp_ctx)); - ret->unix_charset = talloc_strdup(ret, lp_unix_charset(lp_ctx)); + ret->dos_charset = talloc_strdup(ret, dos_charset); + ret->unix_charset = talloc_strdup(ret, unix_charset); + ret->display_charset = talloc_strdup(ret, display_charset); + ret->native_iconv = native_iconv; return ret; } - -_PUBLIC_ void reload_charcnv(void) -{ - talloc_free(global_smb_iconv_convenience); - global_smb_iconv_convenience = smb_iconv_convenience_init(talloc_autofree_context(), global_loadparm); -} - -static void free_global_smb_iconv_convenience(void) -{ - talloc_free(global_smb_iconv_convenience); -} - /* on-demand initialisation of conversion handles */ @@ -120,8 +115,7 @@ { const char *n1, *n2; static int initialised; - /* auto-free iconv memory on exit so valgrind reports are easier - to look at */ + if (initialised == 0) { initialised = 1; @@ -134,7 +128,6 @@ */ setlocale(LC_ALL, "C"); #endif - atexit(free_global_smb_iconv_convenience); } if (ic->conv_handles[from][to]) { @@ -144,7 +137,7 @@ n1 = charset_name(ic, from); n2 = charset_name(ic, to); - ic->conv_handles[from][to] = smb_iconv_open(n2,n1); + ic->conv_handles[from][to] = smb_iconv_open(n2, n1, ic->native_iconv); if (ic->conv_handles[from][to] == (smb_iconv_t)-1) { if ((from == CH_DOS || to == CH_DOS) && @@ -156,7 +149,8 @@ n1 = charset_name(ic, from); n2 = charset_name(ic, to); - ic->conv_handles[from][to] = smb_iconv_open(n2,n1); + ic->conv_handles[from][to] = smb_iconv_open(n2, n1, + ic->native_iconv); } } Modified: branches/SAMBA_4_0/source/lib/charset/iconv.c =================================================================== --- branches/SAMBA_4_0/source/lib/charset/iconv.c 2007-12-06 17:04:11 UTC (rev 26314) +++ branches/SAMBA_4_0/source/lib/charset/iconv.c 2007-12-06 17:16:40 UTC (rev 26315) @@ -157,7 +157,8 @@ /* simple iconv_open() wrapper */ -smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode) +smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode, + bool native_iconv) { smb_iconv_t ret; const struct charset_functions *from=NULL, *to=NULL; @@ -199,7 +200,7 @@ } #ifdef HAVE_NATIVE_ICONV - if ((!from || !to) && !lp_parm_bool(global_loadparm, NULL, "iconv", "native", true)) { + if ((!from || !to) && !native_iconv) { goto failed; } if (!from) { Modified: branches/SAMBA_4_0/source/lib/charset/tests/iconv.c =================================================================== --- branches/SAMBA_4_0/source/lib/charset/tests/iconv.c 2007-12-06 17:04:11 UTC (rev 26314) +++ branches/SAMBA_4_0/source/lib/charset/tests/iconv.c 2007-12-06 17:16:40 UTC (rev 26315) @@ -157,8 +157,8 @@ "failed to open %s to UTF-16LE", charset)); } - cd2 = smb_iconv_open(charset, "UTF-16LE"); - cd3 = smb_iconv_open("UTF-16LE", charset); + cd2 = smb_iconv_open(charset, "UTF-16LE", lp_parm_bool(test->lp_ctx, NULL, "iconv", "native", true)); + cd3 = smb_iconv_open("UTF-16LE", charset, lp_parm_bool(test->lp_ctx, NULL, "iconv", "native", true)); last_charset = charset; } Modified: branches/SAMBA_4_0/source/param/param.h =================================================================== --- branches/SAMBA_4_0/source/param/param.h 2007-12-06 17:04:11 UTC (rev 26314) +++ branches/SAMBA_4_0/source/param/param.h 2007-12-06 17:16:40 UTC (rev 26315) @@ -64,5 +64,6 @@ extern struct loadparm_context *global_loadparm; extern struct loadparm_service sDefault; +extern struct smb_iconv_convenience *global_smb_iconv_convenience; #endif /* _PARAM_H */ Modified: branches/SAMBA_4_0/source/param/util.c =================================================================== --- branches/SAMBA_4_0/source/param/util.c 2007-12-06 17:04:11 UTC (rev 26314) +++ branches/SAMBA_4_0/source/param/util.c 2007-12-06 17:16:40 UTC (rev 26315) @@ -283,3 +283,19 @@ return smbd_tmp_path(mem_ctx, lp_ctx, "messaging"); } +struct smb_iconv_convenience *global_smb_iconv_convenience = NULL; + +struct smb_iconv_convenience *smb_iconv_convenience_init_lp(TALLOC_CTX *mem_ctx, + struct loadparm_context *lp_ctx) +{ + return smb_iconv_convenience_init(mem_ctx, lp_dos_charset(lp_ctx), + lp_unix_charset(lp_ctx), + lp_display_charset(lp_ctx), + lp_parm_bool(lp_ctx, NULL, "iconv", "native", true)); +} + +_PUBLIC_ void reload_charcnv(void) +{ + talloc_free(global_smb_iconv_convenience); + global_smb_iconv_convenience = smb_iconv_convenience_init_lp(talloc_autofree_context(), global_loadparm); +} Modified: branches/SAMBA_4_0/source/torture/smbiconv.c =================================================================== --- branches/SAMBA_4_0/source/torture/smbiconv.c 2007-12-06 17:04:11 UTC (rev 26314) +++ branches/SAMBA_4_0/source/torture/smbiconv.c 2007-12-06 17:16:40 UTC (rev 26315) @@ -205,7 +205,7 @@ } } - cd = smb_iconv_open(to, from); + cd = smb_iconv_open(to, from, lp_parm_bool(tctx->lp_ctx, NULL, "iconv", "native", true)); if((int)cd == -1) { DEBUG(0,("unable to find from or to encoding, exiting...\n")); return 1;
