libreplace: added replacements for dprintf() and vdprintf()
authorAndrew Tridgell <tridge@samba.org>
Thu, 11 Feb 2010 09:18:50 +0000 (20:18 +1100)
committerKarolin Seeger <kseeger@samba.org>
Fri, 14 Dec 2012 09:01:37 +0000 (10:01 +0100)
these are very useful for writing files with formatted writes

Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>
(cherry picked from commit d6fb64c51244529388b1f79ba8220ff608e1e4de)
(cherry picked from commit 4bf8dc438318e06ee96dc1b6084dddd8700739e7)

lib/replace/libreplace.m4
lib/replace/replace.c

index 1353c1f7d2677c7e6106677af7e3446b120b42a3..7a26deb6119bfc8239cdb4a1e80badd74655cc6b 100644 (file)
@@ -108,7 +108,7 @@ AC_CHECK_HEADERS(unix.h)
 AC_CHECK_FUNCS(seteuid setresuid setegid setresgid chroot bzero strerror)
 AC_CHECK_FUNCS(vsyslog setlinebuf mktime ftruncate chsize rename)
 AC_CHECK_FUNCS(waitpid wait4 strlcpy strlcat initgroups memmove strdup)
-AC_CHECK_FUNCS(pread pwrite strndup strcasestr strtok_r mkdtemp dup2)
+AC_CHECK_FUNCS(pread pwrite strndup strcasestr strtok_r mkdtemp dup2 dprintf vdprintf)
 AC_CHECK_FUNCS(isatty chown lchown link readlink symlink realpath)
 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
index 17fd46bcc89828b5bd85ce7573c68fafe106c04c..83966b1b1fedb4a9f8dea41f04ca086b89b15497 100644 (file)
@@ -704,3 +704,34 @@ void *rep_memmem(const void *haystack, size_t haystacklen,
 }
 #endif
 
+#ifndef HAVE_VDPRINTF
+int vdprintf(int fd, const char *format, va_list ap)
+{
+       char *s = NULL;
+       int ret;
+
+       vasprintf(&s, format, ap);
+       if (s == NULL) {
+               errno = ENOMEM;
+               return -1;
+       }
+       ret = write(fd, s, strlen(s));
+       free(s);
+       return ret;
+}
+#endif
+
+#ifndef HAVE_DPRINTF
+int dprintf(int fd, const char *format, ...)
+{
+       int ret;
+       va_list ap;
+
+       va_start(ap, format);
+       ret = vdprintf(fd, format, ap);
+       va_end(ap);
+
+       return ret;
+}
+#endif
+