]> granicus.if.org Git - file/commitdiff
Provide dprintf(3)
authorChristos Zoulas <christos@zoulas.com>
Fri, 13 Nov 2015 15:36:14 +0000 (15:36 +0000)
committerChristos Zoulas <christos@zoulas.com>
Fri, 13 Nov 2015 15:36:14 +0000 (15:36 +0000)
ChangeLog
configure.ac
src/dprintf.c [new file with mode: 0644]
src/file.h

index 6516c00e6b7274ac1e5ec2ddf391204bc6941251..57874b995a9372332c112bcde3c4aeb44c291bf3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-11-13  10:35  Christos Zoulas <christos@zoulas.com>
+
+       * provide dprintf(3) for the OS's that don't have it.
+
 2015-11-11  16:25  Christos Zoulas <christos@zoulas.com>
 
        * redo the compression code report decompression errors
index 50c3188d23fe24fcbd3038a0c621585cdbe9c86a..e518576a7c6120faf5a5ae13f2d0026fefe8f524 100644 (file)
@@ -145,7 +145,7 @@ dnl Checks for functions
 AC_CHECK_FUNCS(strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale setlocale)
 
 dnl Provide implementation of some required functions if necessary
-AC_REPLACE_FUNCS(getopt_long asprintf vasprintf strlcpy strlcat getline ctime_r asctime_r localtime_r gmtime_r pread strcasestr fmtcheck)
+AC_REPLACE_FUNCS(getopt_long asprintf vasprintf strlcpy strlcat getline ctime_r asctime_r localtime_r gmtime_r pread strcasestr fmtcheck dprintf)
 
 dnl Checks for libraries
 AC_CHECK_LIB(z,gzopen)
diff --git a/src/dprintf.c b/src/dprintf.c
new file mode 100644 (file)
index 0000000..5d9c58b
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ * 
+ * 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 immediately at the beginning of the file, without modification,
+ *    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 AUTHOR 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 AUTHOR 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.
+ */
+#include "file.h"
+
+#ifndef        lint
+FILE_RCSID("@(#)$File: dprintf.c,v 1.13 2014/12/04 15:56:46 christos Exp $")
+#endif /* lint */
+
+#include <assert.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+int
+dprintf(int fd, const char *fmt, ...)
+{
+       va_list ap;
+       /* Simpler than using vasprintf() here, since we never need more */
+       char buf[1024];
+       int len;
+
+       va_start(ap, fmt);
+       len = vsnprintf(buf, sizeof(buf), fmt, ap);
+       va_end(ap);
+
+       if ((size_t)len >= sizeof(buf))
+               return -1;
+
+       if (write(fd, buf, (size_t)len) != len)
+               return -1;
+
+       return len;
+}
index 8d92702352ae25118ed7eff44d23f655790e5e80..f2d6c564ae6a24cf701b9b092818023ae08fdd9d 100644 (file)
@@ -27,7 +27,7 @@
  */
 /*
  * file.h - definitions for file(1) program
- * @(#)$File: file.h,v 1.172 2015/09/11 17:24:09 christos Exp $
+ * @(#)$File: file.h,v 1.173 2015/11/09 21:03:42 christos Exp $
  */
 
 #ifndef __file_h__
@@ -552,6 +552,9 @@ int vasprintf(char **, const char *, va_list);
 #ifndef HAVE_ASPRINTF
 int asprintf(char **, const char *, ...);
 #endif
+#ifndef HAVE_DPRINTF
+int dprintf(int, const char *, ...);
+#endif
 
 #ifndef HAVE_STRLCPY
 size_t strlcpy(char *, const char *, size_t);