Switch to POSIX dprintf/vdprintf.
Bug: 11156955 Change-Id: I734bd02db514367ab119a48304aae9767958e367
This commit is contained in:
		
				
					committed by
					
						
						Calin Juravle
					
				
			
			
				
	
			
			
			
						parent
						
							b2b0f7e1ae
						
					
				
				
					commit
					fcac8ff97f
				
			@@ -43,7 +43,6 @@ libc_common_src_files := \
 | 
			
		||||
    bionic/err.c \
 | 
			
		||||
    bionic/ether_aton.c \
 | 
			
		||||
    bionic/ether_ntoa.c \
 | 
			
		||||
    bionic/fdprintf.c \
 | 
			
		||||
    bionic/ftime.c \
 | 
			
		||||
    bionic/fts.c \
 | 
			
		||||
    bionic/getdtablesize.c \
 | 
			
		||||
@@ -371,6 +370,7 @@ libc_upstream_openbsd_src_files := \
 | 
			
		||||
    upstream-openbsd/lib/libc/net/ntohs.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/asprintf.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/clrerr.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/dprintf.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/fdopen.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/feof.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/ferror.c \
 | 
			
		||||
@@ -435,6 +435,7 @@ libc_upstream_openbsd_src_files := \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/ungetc.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/ungetwc.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/vasprintf.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/vdprintf.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/vfprintf.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/vfscanf.c \
 | 
			
		||||
    upstream-openbsd/lib/libc/stdio/vfwprintf.c \
 | 
			
		||||
 
 | 
			
		||||
@@ -1,58 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2010 The Android Open Source Project
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *  * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *  * 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 COPYRIGHT HOLDERS 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
 | 
			
		||||
 * COPYRIGHT OWNER 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 <stdio.h>
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
int vfdprintf(int fd, const char * __restrict format, __va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	char *buf=0;
 | 
			
		||||
	int ret;
 | 
			
		||||
	ret = vasprintf(&buf, format, ap);
 | 
			
		||||
	if (ret < 0)
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	ret = write(fd, buf, ret);
 | 
			
		||||
	free(buf);
 | 
			
		||||
end:
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int fdprintf(int fd, const char * __restrict format, ...)
 | 
			
		||||
{
 | 
			
		||||
	__va_list ap;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	va_start(ap, format);
 | 
			
		||||
	ret = vfdprintf(fd, format, ap);
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
@@ -32,6 +32,7 @@
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
#include <pthread.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <sys/resource.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
@@ -184,4 +185,18 @@ extern "C" intmax_t strntoimax(const char* nptr, char** endptr, int base, size_t
 | 
			
		||||
  return (intmax_t) strntoumax(nptr, endptr, base, n);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// POSIX calls this dprintf, but LP32 Android had fdprintf instead.
 | 
			
		||||
extern "C" int fdprintf(int fd, const char* fmt, ...) {
 | 
			
		||||
  va_list ap;
 | 
			
		||||
  va_start(ap, fmt);
 | 
			
		||||
  int rc = vdprintf(fd, fmt, ap);
 | 
			
		||||
  va_end(ap);
 | 
			
		||||
  return rc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// POSIX calls this vdprintf, but LP32 Android had fdprintf instead.
 | 
			
		||||
extern "C" int vfdprintf(int fd, const char* fmt, va_list ap) {
 | 
			
		||||
  return vdprintf(fd, fmt, ap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -250,6 +250,9 @@ int	 vfprintf(FILE * __restrict, const char * __restrict, __va_list)
 | 
			
		||||
int	 vprintf(const char * __restrict, __va_list)
 | 
			
		||||
		__printflike(1, 0);
 | 
			
		||||
 | 
			
		||||
int dprintf(int, const char * __restrict, ...) __printflike(2, 3);
 | 
			
		||||
int vdprintf(int, const char * __restrict, __va_list) __printflike(2, 0);
 | 
			
		||||
 | 
			
		||||
#ifndef __AUDIT__
 | 
			
		||||
char* gets(char*) __warnattr("gets is very unsafe; consider using fgets");
 | 
			
		||||
int sprintf(char* __restrict, const char* __restrict, ...)
 | 
			
		||||
@@ -359,21 +362,6 @@ __END_DECLS
 | 
			
		||||
#define	fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
 | 
			
		||||
#endif /* __BSD_VISIBLE */
 | 
			
		||||
 | 
			
		||||
#ifdef _GNU_SOURCE
 | 
			
		||||
/*
 | 
			
		||||
 * glibc defines dprintf(int, const char*, ...), which is poorly named
 | 
			
		||||
 * and likely to conflict with locally defined debugging printfs
 | 
			
		||||
 * fdprintf is a better name, and some programs that use fdprintf use a
 | 
			
		||||
 * #define fdprintf dprintf for compatibility
 | 
			
		||||
 */
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
int fdprintf(int, const char*, ...)
 | 
			
		||||
		__printflike(2, 3);
 | 
			
		||||
int vfdprintf(int, const char*, __va_list)
 | 
			
		||||
		__printflike(2, 0);
 | 
			
		||||
__END_DECLS
 | 
			
		||||
#endif /* _GNU_SOURCE */
 | 
			
		||||
 | 
			
		||||
#if defined(__BIONIC_FORTIFY)
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								libc/upstream-openbsd/lib/libc/stdio/dprintf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								libc/upstream-openbsd/lib/libc/stdio/dprintf.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
/*	$OpenBSD: dprintf.c,v 1.1 2013/01/30 00:08:13 brad Exp $	*/
 | 
			
		||||
/*	$FreeBSD: src/lib/libc/stdio/dprintf.c,v 1.2 2012/11/17 01:49:39 svnexp Exp $	*/
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * Copyright (c) 2009 David Schultz <das@FreeBSD.org>
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2011 The FreeBSD Foundation
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 * Portions of this software were developed by David Chisnall
 | 
			
		||||
 * under sponsorship from the FreeBSD Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * 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 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 <stdio.h>
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
dprintf(int fd, const char * __restrict fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list ap;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
	ret = vdprintf(fd, fmt, ap);
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										73
									
								
								libc/upstream-openbsd/lib/libc/stdio/vdprintf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								libc/upstream-openbsd/lib/libc/stdio/vdprintf.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
/*	$OpenBSD: vdprintf.c,v 1.1 2013/01/30 00:08:13 brad Exp $	*/
 | 
			
		||||
/*	$FreeBSD: src/lib/libc/stdio/vdprintf.c,v 1.4 2012/11/17 01:49:40 svnexp Exp $ */
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * Copyright (c) 2009 David Schultz <das@FreeBSD.org>
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2011 The FreeBSD Foundation
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 * Portions of this software were developed by David Chisnall
 | 
			
		||||
 * under sponsorship from the FreeBSD Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * 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 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 <errno.h>
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include "local.h"
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
__dwrite(void *cookie, const char *buf, int n)
 | 
			
		||||
{
 | 
			
		||||
	int *fdp = cookie;
 | 
			
		||||
	return (write(*fdp, buf, n));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
vdprintf(int fd, const char * __restrict fmt, va_list ap)
 | 
			
		||||
{
 | 
			
		||||
	FILE f;
 | 
			
		||||
	struct __sfileext fext;
 | 
			
		||||
	unsigned char buf[BUFSIZ];
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	_FILEEXT_SETUP(&f, &fext);
 | 
			
		||||
 | 
			
		||||
	f._p = buf;
 | 
			
		||||
	f._w = sizeof(buf);
 | 
			
		||||
	f._flags = __SWR;
 | 
			
		||||
	f._file = -1;
 | 
			
		||||
	f._bf._base = buf;
 | 
			
		||||
	f._bf._size = sizeof(buf);
 | 
			
		||||
	f._cookie = &fd;
 | 
			
		||||
	f._write = __dwrite;
 | 
			
		||||
 | 
			
		||||
	if ((ret = __vfprintf(&f, fmt, ap)) < 0)
 | 
			
		||||
		return ret;
 | 
			
		||||
 | 
			
		||||
	return fflush(&f) ? EOF : ret;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user