From 06491a4cb12d8753c63525b3ba4d754d2ab1e822 Mon Sep 17 00:00:00 2001 From: James Peach Date: Thu, 15 Jun 2006 23:51:20 +0000 Subject: r16274: Fix the smbclient prompting behaviour for both systems that have libreadline and those that don't. We always use the built-in readline replacement for non-interactive mode. Interactive prompts are always emitted to stdout and non-interactive mode never prompts at all. Introduce x_fdup to avoid spuriously closing stdout when a logfile is specified on the command line and setup_logging is called a second time. (This used to be commit 848ac756f651a4be231e5635580c0fd5f3d3fa0e) --- source3/lib/xfile.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'source3/lib/xfile.c') diff --git a/source3/lib/xfile.c b/source3/lib/xfile.c index 71f8bdbcbb..ef33c7894f 100644 --- a/source3/lib/xfile.c +++ b/source3/lib/xfile.c @@ -123,6 +123,28 @@ XFILE *x_fopen(const char *fname, int flags, mode_t mode) return ret; } +XFILE *x_fdup(const XFILE *f) +{ + XFILE *ret; + int fd; + + fd = dup(x_fileno(f)); + if (fd < 0) { + return NULL; + } + + ret = SMB_CALLOC_ARRAY(XFILE, 1); + if (!ret) { + close(fd); + return NULL; + } + + ret->fd = fd; + ret->open_flags = f->open_flags; + x_setvbuf(ret, NULL, X_IOFBF, XBUFSIZE); + return ret; +} + /* simulate fclose() */ int x_fclose(XFILE *f) { @@ -220,7 +242,7 @@ size_t x_fwrite(const void *p, size_t size, size_t nmemb, XFILE *f) } /* at least fileno() is simple! */ -int x_fileno(XFILE *f) +int x_fileno(const XFILE *f) { return f->fd; } -- cgit