Allow calling v?dprintf for any target API level.
Old versions of Android called these fdprintf and vfdprintf out of
fears that the glibc names would collide with user debug printfs.
Allow users to just use dprintf and vfdprintf on any version by
renaming those calls to their legacy equivalents if needed.
Test: built trivial NDK module targeting android-14 and using dprintf
Test: make checkbuild
Bug: https://github.com/android-ndk/ndk/issues/72
Change-Id: I90de149278f931380418536abaef47c5cee5c195
diff --git a/libc/include/stdio.h b/libc/include/stdio.h
index ca56437..b103990 100644
--- a/libc/include/stdio.h
+++ b/libc/include/stdio.h
@@ -151,8 +151,20 @@
int vfprintf(FILE * __restrict, const char * __restrict _Nonnull, __va_list) __printflike(2, 0);
int vprintf(const char * __restrict _Nonnull, __va_list) __printflike(1, 0);
+#if __ANDROID_API__ >= 21
int dprintf(int, const char* __restrict _Nonnull, ...) __printflike(2, 3) __INTRODUCED_IN(21);
int vdprintf(int, const char* __restrict _Nonnull, __va_list) __printflike(2, 0) __INTRODUCED_IN(21);
+#else
+/*
+ * Old versions of Android called these fdprintf and vfdprintf out of fears that the glibc names
+ * would collide with user debug printfs.
+ *
+ * Allow users to just use dprintf and vfdprintf on any version by renaming those calls to their
+ * legacy equivalents if needed.
+ */
+int dprintf(int, const char* __restrict _Nonnull, ...) __printflike(2, 3) __RENAME(fdprintf);
+int vdprintf(int, const char* __restrict _Nonnull, __va_list) __printflike(2, 0) __RENAME(vfdprintf);
+#endif
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ < 201112L) || \
(defined(__cplusplus) && __cplusplus <= 201103L)
diff --git a/libc/libc.arm.map b/libc/libc.arm.map
index a4212dd..a22923e 100644
--- a/libc/libc.arm.map
+++ b/libc/libc.arm.map
@@ -343,6 +343,7 @@
fdatasync;
fdopen;
fdopendir;
+ fdprintf; # arm x86 mips versioned=28
feof;
feof_unlocked; # introduced=23
ferror;
@@ -1105,6 +1106,7 @@
vdprintf; # introduced=21
verr;
verrx;
+ vfdprintf; # arm x86 mips versioned=28
vfork;
vfprintf;
vfscanf;
@@ -1507,7 +1509,6 @@
dlmalloc_inspect_all; # arm x86 mips
dlmalloc_trim; # arm x86 mips
dlmalloc_usable_size; # arm x86 mips
- fdprintf; # arm x86 mips
free_malloc_leak_info;
ftime; # arm x86 mips
get_malloc_leak_info;
@@ -1529,7 +1530,6 @@
strtotimeval; # arm x86 mips
sysv_signal; # arm x86 mips
tkill; # arm x86 mips
- vfdprintf; # arm x86 mips
wait3; # arm x86 mips
wcswcs; # arm x86 mips
} LIBC_O;
diff --git a/libc/libc.map.txt b/libc/libc.map.txt
index c271a57..d4c36d5 100644
--- a/libc/libc.map.txt
+++ b/libc/libc.map.txt
@@ -345,6 +345,7 @@
fdatasync;
fdopen;
fdopendir;
+ fdprintf; # arm x86 mips versioned=28
feof;
feof_unlocked; # introduced=23
ferror;
@@ -1130,6 +1131,7 @@
vdprintf; # introduced=21
verr;
verrx;
+ vfdprintf; # arm x86 mips versioned=28
vfork;
vfprintf;
vfscanf;
@@ -1533,7 +1535,6 @@
dlmalloc_inspect_all; # arm x86 mips
dlmalloc_trim; # arm x86 mips
dlmalloc_usable_size; # arm x86 mips
- fdprintf; # arm x86 mips
free_malloc_leak_info;
ftime; # arm x86 mips
get_malloc_leak_info;
@@ -1555,7 +1556,6 @@
strtotimeval; # arm x86 mips
sysv_signal; # arm x86 mips
tkill; # arm x86 mips
- vfdprintf; # arm x86 mips
wait3; # arm x86 mips
wcswcs; # arm x86 mips
} LIBC_O;
diff --git a/libc/libc.mips.map b/libc/libc.mips.map
index 214c7f5..35a674e 100644
--- a/libc/libc.mips.map
+++ b/libc/libc.mips.map
@@ -341,6 +341,7 @@
fdatasync;
fdopen;
fdopendir;
+ fdprintf; # arm x86 mips versioned=28
feof;
feof_unlocked; # introduced=23
ferror;
@@ -1103,6 +1104,7 @@
vdprintf; # introduced=21
verr;
verrx;
+ vfdprintf; # arm x86 mips versioned=28
vfork;
vfprintf;
vfscanf;
@@ -1349,7 +1351,6 @@
dlmalloc_inspect_all; # arm x86 mips
dlmalloc_trim; # arm x86 mips
dlmalloc_usable_size; # arm x86 mips
- fdprintf; # arm x86 mips
free_malloc_leak_info;
ftime; # arm x86 mips
get_malloc_leak_info;
@@ -1370,7 +1371,6 @@
strtotimeval; # arm x86 mips
sysv_signal; # arm x86 mips
tkill; # arm x86 mips
- vfdprintf; # arm x86 mips
wait3; # arm x86 mips
wcswcs; # arm x86 mips
} LIBC_O;
diff --git a/libc/libc.x86.map b/libc/libc.x86.map
index 145b64e..0e130ce 100644
--- a/libc/libc.x86.map
+++ b/libc/libc.x86.map
@@ -339,6 +339,7 @@
fdatasync;
fdopen;
fdopendir;
+ fdprintf; # arm x86 mips versioned=28
feof;
feof_unlocked; # introduced=23
ferror;
@@ -1101,6 +1102,7 @@
vdprintf; # introduced=21
verr;
verrx;
+ vfdprintf; # arm x86 mips versioned=28
vfork;
vfprintf;
vfscanf;
@@ -1348,7 +1350,6 @@
dlmalloc_inspect_all; # arm x86 mips
dlmalloc_trim; # arm x86 mips
dlmalloc_usable_size; # arm x86 mips
- fdprintf; # arm x86 mips
free_malloc_leak_info;
ftime; # arm x86 mips
get_malloc_leak_info;
@@ -1369,7 +1370,6 @@
strtotimeval; # arm x86 mips
sysv_signal; # arm x86 mips
tkill; # arm x86 mips
- vfdprintf; # arm x86 mips
wait3; # arm x86 mips
wcswcs; # arm x86 mips
} LIBC_O;