1*34b5c75aSHans Rosenfeld /*
2*34b5c75aSHans Rosenfeld * This file and its contents are supplied under the terms of the
3*34b5c75aSHans Rosenfeld * Common Development and Distribution License ("CDDL"), version 1.0.
4*34b5c75aSHans Rosenfeld * You may only use this file in accordance with the terms of version
5*34b5c75aSHans Rosenfeld * 1.0 of the CDDL.
6*34b5c75aSHans Rosenfeld *
7*34b5c75aSHans Rosenfeld * A full copy of the text of the CDDL should have accompanied this
8*34b5c75aSHans Rosenfeld * source. A copy of the CDDL is also available via the Internet at
9*34b5c75aSHans Rosenfeld * http://www.illumos.org/license/CDDL.
10*34b5c75aSHans Rosenfeld */
11*34b5c75aSHans Rosenfeld
12*34b5c75aSHans Rosenfeld /*
13*34b5c75aSHans Rosenfeld * Copyright 2025 Hans Rosenfeld
14*34b5c75aSHans Rosenfeld */
15*34b5c75aSHans Rosenfeld
16*34b5c75aSHans Rosenfeld #include <stdarg.h>
17*34b5c75aSHans Rosenfeld #include <sys/types.h>
18*34b5c75aSHans Rosenfeld #include "print.h"
19*34b5c75aSHans Rosenfeld
20*34b5c75aSHans Rosenfeld int
vdprintf(int fildes,const char * format,va_list ap)21*34b5c75aSHans Rosenfeld vdprintf(int fildes, const char *format, va_list ap)
22*34b5c75aSHans Rosenfeld {
23*34b5c75aSHans Rosenfeld FILE *file;
24*34b5c75aSHans Rosenfeld int count;
25*34b5c75aSHans Rosenfeld int ret;
26*34b5c75aSHans Rosenfeld
27*34b5c75aSHans Rosenfeld file = fdopen(fildes, "w");
28*34b5c75aSHans Rosenfeld if (file == NULL)
29*34b5c75aSHans Rosenfeld return (EOF);
30*34b5c75aSHans Rosenfeld
31*34b5c75aSHans Rosenfeld /*
32*34b5c75aSHans Rosenfeld * Make the FILE unbuffered, avoiding all kinds of headaches associated
33*34b5c75aSHans Rosenfeld * with buffering and recovering from potential late failure of delayed
34*34b5c75aSHans Rosenfeld * writes.
35*34b5c75aSHans Rosenfeld */
36*34b5c75aSHans Rosenfeld (void) setvbuf(file, NULL, _IONBF, 0);
37*34b5c75aSHans Rosenfeld
38*34b5c75aSHans Rosenfeld /*
39*34b5c75aSHans Rosenfeld * As this FILE is temporary and exists only for the runtime of this
40*34b5c75aSHans Rosenfeld * function, there should be no need for locking.
41*34b5c75aSHans Rosenfeld */
42*34b5c75aSHans Rosenfeld SET_IONOLOCK(file);
43*34b5c75aSHans Rosenfeld
44*34b5c75aSHans Rosenfeld count = vfprintf(file, format, ap);
45*34b5c75aSHans Rosenfeld
46*34b5c75aSHans Rosenfeld (void) fdclose(file, NULL);
47*34b5c75aSHans Rosenfeld
48*34b5c75aSHans Rosenfeld return (count);
49*34b5c75aSHans Rosenfeld }
50*34b5c75aSHans Rosenfeld
51*34b5c75aSHans Rosenfeld int
dprintf(int fildes,const char * format,...)52*34b5c75aSHans Rosenfeld dprintf(int fildes, const char *format, ...)
53*34b5c75aSHans Rosenfeld {
54*34b5c75aSHans Rosenfeld int count;
55*34b5c75aSHans Rosenfeld va_list ap;
56*34b5c75aSHans Rosenfeld
57*34b5c75aSHans Rosenfeld va_start(ap, format);
58*34b5c75aSHans Rosenfeld count = vdprintf(fildes, format, ap);
59*34b5c75aSHans Rosenfeld va_end(ap);
60*34b5c75aSHans Rosenfeld
61*34b5c75aSHans Rosenfeld return (count);
62*34b5c75aSHans Rosenfeld }
63