diff options
author | Andrew Tridgell <tridge@samba.org> | 2001-09-07 14:14:57 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2001-09-07 14:14:57 +0000 |
commit | 5573a1c7394362f5e46c58b8cfaf6bf7a080c391 (patch) | |
tree | fffa468b63bbb72701e4ed06667fbdf3459ea19b /source3/lib/dprintf.c | |
parent | 83ebf2b6b282926930dc2c5dee3b5f18447d6e81 (diff) | |
download | samba-5573a1c7394362f5e46c58b8cfaf6bf7a080c391.tar.gz samba-5573a1c7394362f5e46c58b8cfaf6bf7a080c391.tar.bz2 samba-5573a1c7394362f5e46c58b8cfaf6bf7a080c391.zip |
added "display charset" option in smb.conf, along with d_printf()
which should now be used instead of DEBUG(0) or printf() for
interactive messages
I have only converted client.c to use d_printf(), and the code hasn't
had much testing yet. Eventually we want all interactive code to use
d_printf(), plus SWAT
(This used to be commit 266d8e67669adb329f25676c4bc4d4c50f223428)
Diffstat (limited to 'source3/lib/dprintf.c')
-rw-r--r-- | source3/lib/dprintf.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/source3/lib/dprintf.c b/source3/lib/dprintf.c new file mode 100644 index 0000000000..59e1859c43 --- /dev/null +++ b/source3/lib/dprintf.c @@ -0,0 +1,104 @@ +/* + Unix SMB/Netbios implementation. + Version 3.0 + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + +/* + 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 constaints + + The d_ prefix on print functions in Samba refers to the display character set + conversion +*/ + +#include "includes.h" + +int d_vfprintf(FILE *f, const char *format, va_list ap) +{ + char *p, *p2; + int ret, maxlen, clen; + + ret = vasprintf(&p, format, ap); + + 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 = malloc(maxlen); + if (!p2) { + free(p); + return -1; + } + clen = convert_string(CH_UNIX, CH_DISPLAY, p, ret, p2, maxlen); + + if (clen >= maxlen) { + /* it didn't fit - try a larger buffer */ + maxlen *= 2; + free(p2); + goto again; + } + + /* good, its converted OK */ + free(p); + ret = fwrite(p2, 1, clen, f); + free(p2); + + 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; +} |