summaryrefslogtreecommitdiff
path: root/tools/compat
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2013-03-05 16:26:41 +0000
committerchristos <christos@NetBSD.org>2013-03-05 16:26:41 +0000
commit8b7a56ebfae8db4db0108bbdc084b19f4e619e96 (patch)
treeedf938b3c73b1e1d809dc5d16295a1955419e049 /tools/compat
parentcf850ca7f0f047dba415e4314beab640a61ca40e (diff)
add dprintf
Diffstat (limited to 'tools/compat')
-rw-r--r--tools/compat/Makefile4
-rw-r--r--tools/compat/compat_defs.h5
-rw-r--r--tools/compat/configure.ac4
-rw-r--r--tools/compat/dprintf.c75
4 files changed, 83 insertions, 5 deletions
diff --git a/tools/compat/Makefile b/tools/compat/Makefile
index 2ead4cb1442..f94171ff7bc 100644
--- a/tools/compat/Makefile
+++ b/tools/compat/Makefile
@@ -1,11 +1,11 @@
-# $NetBSD: Makefile,v 1.67 2012/12/10 00:34:56 christos Exp $
+# $NetBSD: Makefile,v 1.68 2013/03/05 16:27:29 christos Exp $
HOSTLIB= nbcompat
.include <bsd.own.mk>
SRCS= atoll.c basename.c cdbr.c cdbw.c dirname.c \
- fgetln.c flock.c fparseln.c fpurge.c \
+ dprintf.c fgetln.c flock.c fparseln.c fpurge.c \
getcap.c getline.c getmode.c getopt_long.c gettemp.c \
heapsort.c \
issetugid.c lchflags.c lchmod.c lchown.c libyywrap.c \
diff --git a/tools/compat/compat_defs.h b/tools/compat/compat_defs.h
index ac968324e54..b74265f1978 100644
--- a/tools/compat/compat_defs.h
+++ b/tools/compat/compat_defs.h
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_defs.h,v 1.87 2013/02/17 00:34:11 christos Exp $ */
+/* $NetBSD: compat_defs.h,v 1.88 2013/03/05 16:26:41 christos Exp $ */
#ifndef __NETBSD_COMPAT_DEFS_H__
#define __NETBSD_COMPAT_DEFS_H__
@@ -267,6 +267,9 @@ int evasprintf(char **, const char *, va_list);
#if !HAVE_FGETLN || defined(__NetBSD__)
char *fgetln(FILE *, size_t *);
#endif
+#if !HAVE_DPRINTF
+int dprintf(int, const char *, ...);
+#endif
#if !HAVE_FLOCK
# define LOCK_SH 0x01
diff --git a/tools/compat/configure.ac b/tools/compat/configure.ac
index ab5d200e16a..7e9657773c9 100644
--- a/tools/compat/configure.ac
+++ b/tools/compat/configure.ac
@@ -1,4 +1,4 @@
-# $NetBSD: configure.ac,v 1.75 2013/02/17 00:34:11 christos Exp $
+# $NetBSD: configure.ac,v 1.76 2013/03/05 16:26:41 christos Exp $
#
# Autoconf definition file for libnbcompat.
#
@@ -147,7 +147,7 @@ AC_CHECK_DECLS(sys_signame,,, [#include <signal.h>])
# Library functions (where a .h check isn't enough).
AC_FUNC_ALLOCA
AC_CHECK_FUNCS(atoll asprintf asnprintf basename devname dirfd dirname \
- esetfunc fgetln flock fpurge __fpurge futimes getline \
+ dprintf esetfunc fgetln flock fpurge __fpurge futimes getline \
getopt getopt_long group_from_gid gid_from_group \
heapsort isblank issetugid lchflags lchmod lchown lutimes mkstemp \
mkdtemp poll pread putc_unlocked pwcache_userdb pwcache_groupdb \
diff --git a/tools/compat/dprintf.c b/tools/compat/dprintf.c
new file mode 100644
index 00000000000..0c105841888
--- /dev/null
+++ b/tools/compat/dprintf.c
@@ -0,0 +1,75 @@
+/* $NetBSD: dprintf.c,v 1.1 2013/03/05 16:26:41 christos Exp $ */
+
+/*-
+ * Copyright (c) 2013 NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_NBTOOL_CONFIG_H
+#include "nbtool_config.h"
+#endif
+
+#if !HAVE_DPRINTF
+#include <stdlib.h>
+#ifndef HAVE_NBTOOL_CONFIG_H
+/* These headers are required, but included from nbtool_config.h */
+#include <stdio.h>
+#include <stdarg.h>
+#include <unistd.h>
+#endif
+
+int
+dprintf(int fd, const char *fmt, ...)
+{
+ FILE *fp;
+ int e;
+ va_list ap;
+
+ if ((e = dup(fd)) == -1)
+ return -1;
+
+ if ((fp = fdopen(e, "r+")) == NULL)
+ return -1;
+
+ va_start(ap, fmt);
+ e = vfprintf(fp, fmt, ap);
+ va_end(ap);
+
+ (void)fclose(fp);
+ return e;
+}
+
+#endif /* HAVE_DPRINTF */
+
+#ifdef TEST
+int
+main(int argc, char *argv[])
+{
+ dprintf(1, "Hello %s\n", "world");
+ return 0;
+}
+#endif