svn commit: samba r26315 - in branches/SAMBA_4_0: . source/lib/charset source/lib/charset/tests source/param source/torture

jelmer at samba.org jelmer at samba.org
Thu Dec 6 17:16:41 GMT 2007


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;



More information about the samba-cvs mailing list