GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: lib/libc/stdio/vdprintf.c Lines: 17 18 94.4 %
Date: 2017-11-07 Branches: 1 2 50.0 %

Line Branch Exec Source
1
/*	$OpenBSD: vdprintf.c,v 1.2 2015/08/31 02:53:57 guenther Exp $	*/
2
/*	$FreeBSD: src/lib/libc/stdio/vdprintf.c,v 1.4 2012/11/17 01:49:40 svnexp Exp $ */
3
4
/*-
5
 * Copyright (c) 2009 David Schultz <das@FreeBSD.org>
6
 * All rights reserved.
7
 *
8
 * Copyright (c) 2011 The FreeBSD Foundation
9
 * All rights reserved.
10
 * Portions of this software were developed by David Chisnall
11
 * under sponsorship from the FreeBSD Foundation.
12
 *
13
 * Redistribution and use in source and binary forms, with or without
14
 * modification, are permitted provided that the following conditions
15
 * are met:
16
 * 1. Redistributions of source code must retain the above copyright
17
 *    notice, this list of conditions and the following disclaimer.
18
 * 2. Redistributions in binary form must reproduce the above copyright
19
 *    notice, this list of conditions and the following disclaimer in the
20
 *    documentation and/or other materials provided with the distribution.
21
 *
22
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32
 * SUCH DAMAGE.
33
 */
34
35
#include <errno.h>
36
#include <stdarg.h>
37
#include <stdio.h>
38
#include <string.h>
39
#include <unistd.h>
40
41
#include "local.h"
42
43
static int
44
__dwrite(void *cookie, const char *buf, int n)
45
{
46
28
	int *fdp = cookie;
47
14
	return (write(*fdp, buf, n));
48
}
49
50
int
51
vdprintf(int fd, const char * __restrict fmt, va_list ap)
52
{
53
14
	FILE f;
54
14
	struct __sfileext fext;
55
14
	unsigned char buf[BUFSIZ];
56
	int ret;
57
58
14
	_FILEEXT_SETUP(&f, &fext);
59
60
14
	f._p = buf;
61
14
	f._w = sizeof(buf);
62
14
	f._flags = __SWR;
63
14
	f._file = -1;
64
14
	f._bf._base = buf;
65
14
	f._bf._size = sizeof(buf);
66
14
	f._cookie = &fd;
67
14
	f._write = __dwrite;
68
69
14
	if ((ret = __vfprintf(&f, fmt, ap)) < 0)
70
		return ret;
71
72
14
	return fflush(&f) ? EOF : ret;
73
14
}
74
DEF_WEAK(vdprintf);