From f83fca1c576e094e2a852cc466bd9110c05fe731 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 20 Jun 2011 19:56:50 +1000 Subject: lib/util: Use common d_printf() in the whole codebase This removes the lang_tdb based varient, the only user of the lang_tdb code is SWAT, which calls that directly. 'net' and 'pam_winbind' are internationalised using gettext. Andrew Bartlett --- lib/util/dprintf.c | 44 ++++++++-------- lib/util/util.h | 3 -- lib/util/wscript_build | 4 +- source3/Makefile.in | 2 +- source3/lib/dprintf.c | 128 ----------------------------------------------- source3/wscript_build | 1 - source4/param/loadparm.c | 6 --- 7 files changed, 26 insertions(+), 162 deletions(-) delete mode 100644 source3/lib/dprintf.c diff --git a/lib/util/dprintf.c b/lib/util/dprintf.c index c7c701bcfa..c79989b517 100644 --- a/lib/util/dprintf.c +++ b/lib/util/dprintf.c @@ -33,22 +33,15 @@ #include "includes.h" #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) -{ - if (display_cd != (smb_iconv_t)-1) - talloc_free(display_cd); - - display_cd = cd; -} - static int d_vfprintf(FILE *f, const char *format, va_list ap) { char *p, *p2; - int ret, clen; + int ret; + size_t clen; + bool cret; va_list ap2; /* If there's nothing to convert, take a shortcut */ @@ -56,15 +49,14 @@ static int d_vfprintf(FILE *f, const char *format, va_list ap) return vfprintf(f, format, ap); } - /* do any message translations */ va_copy(ap2, ap); ret = vasprintf(&p, format, ap2); va_end(ap2); if (ret <= 0) return ret; - clen = iconv_talloc(NULL, display_cd, p, ret, (void **)&p2); - if (clen == -1) { + cret = convert_string_talloc(NULL, CH_UTF8, CH_DISPLAY, p, ret, (void **)&p2, &clen); + if (!cret) { /* the string can't be converted - do the best we can, filling in non-printing chars with '?' */ int i; @@ -100,15 +92,25 @@ _PUBLIC_ int d_fprintf(FILE *f, const char *format, ...) return ret; } -_PUBLIC_ int d_printf(const char *format, ...) +static FILE *outfile; + +_PUBLIC_ int d_printf(const char *format, ...) { int ret; - va_list ap; - - va_start(ap, format); - ret = d_vfprintf(stdout, format, ap); - va_end(ap); - - return ret; + va_list ap; + + if (!outfile) outfile = stdout; + + va_start(ap, format); + ret = d_vfprintf(outfile, format, ap); + va_end(ap); + + return ret; } +/* interactive programs need a way of tell d_*() to write to stderr instead + of stdout */ +void display_set_stderr(void) +{ + outfile = stderr; +} diff --git a/lib/util/util.h b/lib/util/util.h index f4861a6fcf..c715440186 100644 --- a/lib/util/util.h +++ b/lib/util/util.h @@ -211,13 +211,10 @@ _PUBLIC_ char** generate_unique_strs(TALLOC_CTX *mem_ctx, size_t len, uint32_t num); /* The following definitions come from lib/util/dprintf.c */ -#if _SAMBA_BUILD_ == 4 -_PUBLIC_ void d_set_iconv(smb_iconv_t); _PUBLIC_ int d_fprintf(FILE *f, const char *format, ...) PRINTF_ATTRIBUTE(2,3); _PUBLIC_ int d_printf(const char *format, ...) PRINTF_ATTRIBUTE(1,2); _PUBLIC_ void display_set_stderr(void); -#endif /* The following definitions come from lib/util/util_str.c */ diff --git a/lib/util/wscript_build b/lib/util/wscript_build index a094fa3b54..8046a8ba07 100755 --- a/lib/util/wscript_build +++ b/lib/util/wscript_build @@ -6,11 +6,11 @@ common_util_sources = '''talloc_stack.c smb_threads.c xfile.c data_blob.c signal.c system.c params.c util.c util_id.c util_net.c util_strlist.c util_paths.c idtree.c debug.c fault.c base64.c util_str.c util_str_common.c substitute.c ms_fnmatch.c - server_id.c''' + server_id.c dprintf.c''' common_util_headers = 'debug.h' common_util_public_deps = 'talloc pthread LIBCRYPTO CHARSET' -s4_util_sources = '''dprintf.c parmlist.c''' +s4_util_sources = '''parmlist.c''' s4_util_deps = 'DYNCONFIG' s4_util_public_deps = 'talloc execinfo uid_wrapper' s4_util_public_headers = 'attr.h byteorder.h data_blob.h memory.h safe_string.h time.h talloc_stack.h xfile.h dlinklist.h util.h string_wrappers.h' diff --git a/source3/Makefile.in b/source3/Makefile.in index 5b36fe2533..7a471dde4e 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -455,7 +455,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ) $(CRYPTO_OBJ) \ lib/username.o \ ../libds/common/flag_mapping.o \ lib/access.o lib/smbrun.o \ - lib/bitmap.o lib/dprintf.o $(UTIL_REG_OBJ) \ + lib/bitmap.o ../lib/util/dprintf.o $(UTIL_REG_OBJ) \ lib/wins_srv.o lib/string_init.o \ lib/util_str.o ../lib/util/util_str_common.o \ ../lib/util/util_str.o \ diff --git a/source3/lib/dprintf.c b/source3/lib/dprintf.c deleted file mode 100644 index 55ea7f9888..0000000000 --- a/source3/lib/dprintf.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - Unix SMB/CIFS implementation. - display print functions - Copyright (C) Andrew Tridgell 2001 - - 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 - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - - -/* - this module provides functions for printing internal strings in the "display charset" - This charset may be quite different from the chosen unix charset - - Eventually these functions will need to take care of column count constraints - - The d_ prefix on print functions in Samba refers to the display character set - conversion -*/ - -#include "includes.h" -#include "intl/lang_tdb.h" - -static int d_vfprintf(FILE *f, const char *format, va_list ap) -{ - char *p = NULL, *p2 = NULL; - int ret, maxlen, clen; - size_t size = 0; - const char *msgstr; - va_list ap2; - - va_copy(ap2, ap); - - /* do any message translations */ - msgstr = lang_msg(format); - if (!msgstr) { - ret = -1; - goto out; - } - - ret = vasprintf(&p, msgstr, ap2); - - lang_msg_free(msgstr); - - if (ret <= 0) { - ret = -1; - goto out; - } - - /* 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 *)SMB_MALLOC(maxlen); - if (!p2) { - ret = -1; - goto out; - } - - if (!convert_string(CH_UNIX, CH_DISPLAY, p, ret, p2, maxlen, &size)) { - ret = -1; - goto out; - } - clen = size; - - if (clen >= maxlen) { - /* it didn't fit - try a larger buffer */ - maxlen *= 2; - SAFE_FREE(p2); - goto again; - } - - /* good, its converted OK */ - ret = fwrite(p2, 1, clen, f); -out: - - SAFE_FREE(p); - SAFE_FREE(p2); - va_end(ap2); - - return ret; -} - - - int d_fprintf(FILE *f, const char *format, ...) -{ - int ret; - va_list ap; - - va_start(ap, format); - ret = d_vfprintf(f, format, ap); - va_end(ap); - - return ret; -} - -static FILE *outfile; - - int d_printf(const char *format, ...) -{ - int ret; - va_list ap; - - if (!outfile) outfile = stdout; - - va_start(ap, format); - ret = d_vfprintf(outfile, format, ap); - va_end(ap); - - return ret; -} - -/* interactive programs need a way of tell d_*() to write to stderr instead - of stdout */ -void display_set_stderr(void) -{ - outfile = stderr; -} diff --git a/source3/wscript_build b/source3/wscript_build index 0e76d1f7af..2f430a9047 100755 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -69,7 +69,6 @@ LIB_SRC = ''' lib/system.c lib/sendfile.c lib/recvfile.c lib/time.c lib/username.c lib/access.c lib/smbrun.c - lib/dprintf.c lib/wins_srv.c lib/util_sid.c lib/util_file.c diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c index 0a616b5eb4..61cb9797a4 100644 --- a/source4/param/loadparm.c +++ b/source4/param/loadparm.c @@ -2668,12 +2668,6 @@ static bool lpcfg_update(struct loadparm_context *lp_ctx) unsetenv("SOCKET_TESTNONBLOCK"); } - /* FIXME: Check locale in environment for this: */ - if (strcmp(lpcfg_display_charset(lp_ctx), lpcfg_unix_charset(lp_ctx)) != 0) - d_set_iconv(smb_iconv_open(lpcfg_display_charset(lp_ctx), lpcfg_unix_charset(lp_ctx))); - else - d_set_iconv((smb_iconv_t)-1); - return true; } -- cgit