Author: jelmer Date: 2007-12-13 22:46:33 +0000 (Thu, 13 Dec 2007) New Revision: 26434
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26434 Log: Remove display charset from iconv convenience context. Modified: branches/SAMBA_4_0/ branches/SAMBA_4_0/source/lib/charset/charcnv.c branches/SAMBA_4_0/source/lib/charset/charset.h branches/SAMBA_4_0/source/lib/util/dprintf.c branches/SAMBA_4_0/source/lib/util/util.h branches/SAMBA_4_0/source/param/loadparm.c branches/SAMBA_4_0/source/param/util.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-13 22:46:30 UTC (rev 26433) +++ branches/SAMBA_4_0/source/lib/charset/charcnv.c 2007-12-13 22:46:33 UTC (rev 26434) @@ -42,7 +42,6 @@ struct smb_iconv_convenience { const char *unix_charset; const char *dos_charset; - const char *display_charset; bool native_iconv; smb_iconv_t conv_handles[NUM_CHARSETS][NUM_CHARSETS]; }; @@ -57,7 +56,6 @@ case CH_UTF16: return "UTF-16LE"; case CH_UNIX: return ic->unix_charset; case CH_DOS: return ic->dos_charset; - case CH_DISPLAY: return ic->display_charset; case CH_UTF8: return "UTF8"; case CH_UTF16BE: return "UTF-16BE"; default: @@ -88,7 +86,6 @@ struct smb_iconv_convenience *smb_iconv_convenience_init(TALLOC_CTX *mem_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, @@ -102,7 +99,6 @@ 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; Modified: branches/SAMBA_4_0/source/lib/charset/charset.h =================================================================== --- branches/SAMBA_4_0/source/lib/charset/charset.h 2007-12-13 22:46:30 UTC (rev 26433) +++ branches/SAMBA_4_0/source/lib/charset/charset.h 2007-12-13 22:46:33 UTC (rev 26434) @@ -24,9 +24,9 @@ #include <talloc.h> /* this defines the charset types used in samba */ -typedef enum {CH_UTF16=0, CH_UNIX=1, CH_DISPLAY=2, CH_DOS=3, CH_UTF8=4, CH_UTF16BE=5} charset_t; +typedef enum {CH_UTF16=0, CH_UNIX, CH_DOS, CH_UTF8, CH_UTF16BE} charset_t; -#define NUM_CHARSETS 6 +#define NUM_CHARSETS 5 /* * for each charset we have a function that pulls from that charset to Modified: branches/SAMBA_4_0/source/lib/util/dprintf.c =================================================================== --- branches/SAMBA_4_0/source/lib/util/dprintf.c 2007-12-13 22:46:30 UTC (rev 26433) +++ branches/SAMBA_4_0/source/lib/util/dprintf.c 2007-12-13 22:46:33 UTC (rev 26434) @@ -2,6 +2,7 @@ Unix SMB/CIFS implementation. display print functions Copyright (C) Andrew Tridgell 2001 + Copyright (C) Jelmer Vernooij 2007 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,12 +35,24 @@ #include "system/locale.h" #include "param/param.h" +static smb_iconv_t display_cd = (smb_iconv_t)-1; + +void d_set_iconv(smb_iconv_t cd) +{ + display_cd = cd; +} + _PUBLIC_ int d_vfprintf(FILE *f, const char *format, va_list ap) _PRINTF_ATTRIBUTE(2,0) { char *p, *p2; - int ret, maxlen, clen; + int ret, clen; va_list ap2; + /* If there's nothing to convert, take a shortcut */ + if (display_cd == (smb_iconv_t)-1) { + return vfprintf(f, format, ap); + } + /* do any message translations */ va_copy(ap2, ap); ret = vasprintf(&p, format, ap2); @@ -47,16 +60,7 @@ if (ret <= 0) return ret; - /* now we have the string in unix format, convert it to the display - charset, but beware of it growing */ - maxlen = ret*2; -again: - p2 = (char *)malloc(maxlen); - if (!p2) { - SAFE_FREE(p); - return -1; - } - clen = convert_string(lp_iconv_convenience(global_loadparm), CH_UNIX, CH_DISPLAY, p, ret, p2, maxlen); + clen = convert_string_talloc_descriptor(NULL, display_cd, p, ret, (void **)&p2); if (clen == -1) { /* the string can't be converted - do the best we can, filling in non-printing chars with '?' */ @@ -69,22 +73,13 @@ } } SAFE_FREE(p); - SAFE_FREE(p2); return ret; } - - if (clen >= maxlen) { - /* it didn't fit - try a larger buffer */ - maxlen *= 2; - SAFE_FREE(p2); - goto again; - } - /* good, its converted OK */ SAFE_FREE(p); ret = fwrite(p2, 1, clen, f); - SAFE_FREE(p2); + talloc_free(p2); return ret; } @@ -113,3 +108,4 @@ return ret; } + Modified: branches/SAMBA_4_0/source/lib/util/util.h =================================================================== --- branches/SAMBA_4_0/source/lib/util/util.h 2007-12-13 22:46:30 UTC (rev 26433) +++ branches/SAMBA_4_0/source/lib/util/util.h 2007-12-13 22:46:33 UTC (rev 26434) @@ -262,6 +262,7 @@ /* The following definitions come from lib/util/dprintf.c */ +_PUBLIC_ void d_set_iconv(smb_iconv_t); _PUBLIC_ int d_vfprintf(FILE *f, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0); _PUBLIC_ int d_fprintf(FILE *f, const char *format, ...) PRINTF_ATTRIBUTE(2,3); _PUBLIC_ int d_printf(const char *format, ...) PRINTF_ATTRIBUTE(1,2); Modified: branches/SAMBA_4_0/source/param/loadparm.c =================================================================== --- branches/SAMBA_4_0/source/param/loadparm.c 2007-12-13 22:46:30 UTC (rev 26433) +++ branches/SAMBA_4_0/source/param/loadparm.c 2007-12-13 22:46:33 UTC (rev 26434) @@ -2464,6 +2464,12 @@ reload_charcnv(lp_ctx); + /* FIXME: Check locale in environment for this: */ + if (strcmp(lp_display_charset(lp_ctx), lp_unix_charset(lp_ctx)) != 0) + d_set_iconv(smb_iconv_open(lp_display_charset(lp_ctx), lp_unix_charset(lp_ctx), true)); + else + d_set_iconv((smb_iconv_t)-1); + return bRetval; } @@ -2581,7 +2587,7 @@ { if (lp_ctx == NULL) { return smb_iconv_convenience_init(talloc_autofree_context(), - "CP850", "UTF8", "UTF8", true); + "CP850", "UTF8", true); } return lp_ctx->iconv_convenience; } Modified: branches/SAMBA_4_0/source/param/util.c =================================================================== --- branches/SAMBA_4_0/source/param/util.c 2007-12-13 22:46:30 UTC (rev 26433) +++ branches/SAMBA_4_0/source/param/util.c 2007-12-13 22:46:33 UTC (rev 26434) @@ -288,7 +288,6 @@ { 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)); }