Add __INTRODUCED_IN_FUTURE for unreleased APIs.
Future API levels aren't known (e.g. 25 could be a maintenance release
of N that doesn't contain any bionic updates), so use a placeholder
macro that we can find and replace with the actual API level before each
release.
Bug: http://b/28178111
Change-Id: I667fe53ea1ac49b64135170fc30d5dbe9df94e29
diff --git a/libc/include/bits/wctype.h b/libc/include/bits/wctype.h
index 15ce099..fe7c80e 100644
--- a/libc/include/bits/wctype.h
+++ b/libc/include/bits/wctype.h
@@ -56,8 +56,8 @@
int iswctype(wint_t, wctype_t);
typedef const void* wctrans_t;
-wint_t towctrans(wint_t, wctrans_t) __INTRODUCED_IN(25);
-wctrans_t wctrans(const char*) __INTRODUCED_IN(25);
+wint_t towctrans(wint_t, wctrans_t) __INTRODUCED_IN_FUTURE;
+wctrans_t wctrans(const char*) __INTRODUCED_IN_FUTURE;
__END_DECLS
diff --git a/libc/include/complex.h b/libc/include/complex.h
index 65f56d9..66ea97e 100644
--- a/libc/include/complex.h
+++ b/libc/include/complex.h
@@ -62,63 +62,63 @@
/* 7.3.5.1 The cacos functions */
double complex cacos(double complex) __INTRODUCED_IN(23);
float complex cacosf(float complex) __INTRODUCED_IN(23);
-long double complex cacosl(long double complex) __INTRODUCED_IN(25);
+long double complex cacosl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.5.2 The casin functions */
double complex casin(double complex) __INTRODUCED_IN(23);
float complex casinf(float complex) __INTRODUCED_IN(23);
-long double complex casinl(long double complex) __INTRODUCED_IN(25);
+long double complex casinl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.5.1 The catan functions */
double complex catan(double complex) __INTRODUCED_IN(23);
float complex catanf(float complex) __INTRODUCED_IN(23);
-long double complex catanl(long double complex) __INTRODUCED_IN(25);
+long double complex catanl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.5.1 The ccos functions */
double complex ccos(double complex) __INTRODUCED_IN(23);
float complex ccosf(float complex) __INTRODUCED_IN(23);
-long double complex ccosl(long double complex) __INTRODUCED_IN(25);
+long double complex ccosl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.5.1 The csin functions */
double complex csin(double complex) __INTRODUCED_IN(23);
float complex csinf(float complex) __INTRODUCED_IN(23);
-long double complex csinl(long double complex) __INTRODUCED_IN(25);
+long double complex csinl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.5.1 The ctan functions */
double complex ctan(double complex) __INTRODUCED_IN(23);
float complex ctanf(float complex) __INTRODUCED_IN(23);
-long double complex ctanl(long double complex) __INTRODUCED_IN(25);
+long double complex ctanl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.6 Hyperbolic functions */
/* 7.3.6.1 The cacosh functions */
double complex cacosh(double complex) __INTRODUCED_IN(23);
float complex cacoshf(float complex) __INTRODUCED_IN(23);
-long double complex cacoshl(long double complex) __INTRODUCED_IN(25);
+long double complex cacoshl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.6.2 The casinh functions */
double complex casinh(double complex) __INTRODUCED_IN(23);
float complex casinhf(float complex) __INTRODUCED_IN(23);
-long double complex casinhl(long double complex) __INTRODUCED_IN(25);
+long double complex casinhl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.6.3 The catanh functions */
double complex catanh(double complex) __INTRODUCED_IN(23);
float complex catanhf(float complex) __INTRODUCED_IN(23);
-long double complex catanhl(long double complex) __INTRODUCED_IN(25);
+long double complex catanhl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.6.4 The ccosh functions */
double complex ccosh(double complex) __INTRODUCED_IN(23);
float complex ccoshf(float complex) __INTRODUCED_IN(23);
-long double complex ccoshl(long double complex) __INTRODUCED_IN(25);
+long double complex ccoshl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.6.5 The csinh functions */
double complex csinh(double complex) __INTRODUCED_IN(23);
float complex csinhf(float complex) __INTRODUCED_IN(23);
-long double complex csinhl(long double complex) __INTRODUCED_IN(25);
+long double complex csinhl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.6.6 The ctanh functions */
double complex ctanh(double complex) __INTRODUCED_IN(23);
float complex ctanhf(float complex) __INTRODUCED_IN(23);
-long double complex ctanhl(long double complex) __INTRODUCED_IN(25);
+long double complex ctanhl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.7 Exponential and logarithmic functions */
/* 7.3.7.1 The cexp functions */
double complex cexp(double complex) __INTRODUCED_IN(23);
float complex cexpf(float complex) __INTRODUCED_IN(23);
-long double complex cexpl(long double complex) __INTRODUCED_IN(25);
+long double complex cexpl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.7.2 The clog functions */
-double complex clog(double complex) __INTRODUCED_IN(25);
-float complex clogf(float complex) __INTRODUCED_IN(25);
-long double complex clogl(long double complex) __INTRODUCED_IN(25);
+double complex clog(double complex) __INTRODUCED_IN_FUTURE;
+float complex clogf(float complex) __INTRODUCED_IN_FUTURE;
+long double complex clogl(long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.8 Power and absolute-value functions */
/* 7.3.8.1 The cabs functions */
@@ -126,9 +126,9 @@
float cabsf(float complex) __INTRODUCED_IN(23);
long double cabsl(long double complex) __INTRODUCED_IN_32(21) __INTRODUCED_IN_64(23);
/* 7.3.8.2 The cpow functions */
-double complex cpow(double complex, double complex) __INTRODUCED_IN(25);
-float complex cpowf(float complex, float complex) __INTRODUCED_IN(25);
-long double complex cpowl(long double complex, long double complex) __INTRODUCED_IN(25);
+double complex cpow(double complex, double complex) __INTRODUCED_IN_FUTURE;
+float complex cpowf(float complex, float complex) __INTRODUCED_IN_FUTURE;
+long double complex cpowl(long double complex, long double complex) __INTRODUCED_IN_FUTURE;
/* 7.3.8.3 The csqrt functions */
double complex csqrt(double complex) __INTRODUCED_IN(23);
float complex csqrtf(float complex) __INTRODUCED_IN(23);
diff --git a/libc/include/fcntl.h b/libc/include/fcntl.h
index 26d4f1c..c8030f1 100644
--- a/libc/include/fcntl.h
+++ b/libc/include/fcntl.h
@@ -88,7 +88,7 @@
#if defined(__USE_GNU)
ssize_t readahead(int, off64_t, size_t) __INTRODUCED_IN(21);
-int sync_file_range(int, off64_t, off64_t, unsigned int) __INTRODUCED_IN(25);
+int sync_file_range(int, off64_t, off64_t, unsigned int) __INTRODUCED_IN_FUTURE;
#endif
extern int __open_2(const char*, int) __INTRODUCED_IN(21);
diff --git a/libc/include/grp.h b/libc/include/grp.h
index 9b4a518..42cf223 100644
--- a/libc/include/grp.h
+++ b/libc/include/grp.h
@@ -55,10 +55,10 @@
struct group* getgrnam(const char *);
#if __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE
/* Android has thousands and thousands of ids to iterate through */
-struct group* getgrent(void) __attribute__((warning("getgrent is inefficient on Android")))
-__INTRODUCED_IN(25);
-void setgrent(void) __INTRODUCED_IN(25);
-void endgrent(void) __INTRODUCED_IN(25);
+struct group* getgrent(void)
+ __attribute__((warning("getgrent is inefficient on Android"))) __INTRODUCED_IN_FUTURE;
+void setgrent(void) __INTRODUCED_IN_FUTURE;
+void endgrent(void) __INTRODUCED_IN_FUTURE;
int getgrgid_r(gid_t, struct group*, char*, size_t, struct group**) __INTRODUCED_IN(24);
int getgrnam_r(const char*, struct group*, char*, size_t, struct group**) __INTRODUCED_IN(24);
#endif
diff --git a/libc/include/mntent.h b/libc/include/mntent.h
index b5fb98c..ad9d72f 100644
--- a/libc/include/mntent.h
+++ b/libc/include/mntent.h
@@ -61,7 +61,7 @@
struct mntent* getmntent(FILE*);
struct mntent* getmntent_r(FILE*, struct mntent*, char*, int) __INTRODUCED_IN(21);
FILE* setmntent(const char*, const char*) __INTRODUCED_IN(21);
-char* hasmntopt(const struct mntent*, const char*) __INTRODUCED_IN(25);
+char* hasmntopt(const struct mntent*, const char*) __INTRODUCED_IN_FUTURE;
__END_DECLS
diff --git a/libc/include/nl_types.h b/libc/include/nl_types.h
index bf2e342..bcaab06 100644
--- a/libc/include/nl_types.h
+++ b/libc/include/nl_types.h
@@ -39,9 +39,9 @@
typedef void* nl_catd;
typedef int nl_item;
-nl_catd catopen(const char*, int) __INTRODUCED_IN(25);
-char* catgets(nl_catd, int, int, const char*) __INTRODUCED_IN(25);
-int catclose(nl_catd) __INTRODUCED_IN(25);
+nl_catd catopen(const char*, int) __INTRODUCED_IN_FUTURE;
+char* catgets(nl_catd, int, int, const char*) __INTRODUCED_IN_FUTURE;
+int catclose(nl_catd) __INTRODUCED_IN_FUTURE;
__END_DECLS
diff --git a/libc/include/pthread.h b/libc/include/pthread.h
index f1085a8..2df9b74 100644
--- a/libc/include/pthread.h
+++ b/libc/include/pthread.h
@@ -252,7 +252,7 @@
pthread_t pthread_self(void) __pure2;
#if defined(__USE_GNU)
-int pthread_getname_np(pthread_t, char*, size_t) __nonnull((2)) __INTRODUCED_IN(25);
+int pthread_getname_np(pthread_t, char*, size_t) __nonnull((2)) __INTRODUCED_IN_FUTURE;
#endif
/* TODO: this should be __USE_GNU too. */
int pthread_setname_np(pthread_t, const char*) __nonnull((2));
diff --git a/libc/include/pwd.h b/libc/include/pwd.h
index 7b62644..96a1cd4 100644
--- a/libc/include/pwd.h
+++ b/libc/include/pwd.h
@@ -119,10 +119,10 @@
struct passwd* getpwnam(const char*);
struct passwd* getpwuid(uid_t);
/* Android has thousands and thousands of ids to iterate through */
-struct passwd* getpwent(void) __attribute__((warning("getpwent is inefficient on Android")))
-__INTRODUCED_IN(25);
-void setpwent(void) __INTRODUCED_IN(25);
-void endpwent(void);
+struct passwd* getpwent(void)
+ __attribute__((warning("getpwent is inefficient on Android"))) __INTRODUCED_IN_FUTURE;
+void setpwent(void) __INTRODUCED_IN_FUTURE;
+void endpwent(void) __INTRODUCED_IN_FUTURE;
int getpwnam_r(const char*, struct passwd*, char*, size_t, struct passwd**) __INTRODUCED_IN(21);
int getpwuid_r(uid_t, struct passwd*, char*, size_t, struct passwd**) __INTRODUCED_IN(21);
diff --git a/libc/include/signal.h b/libc/include/signal.h
index 6b127b8..4b5e4ac 100644
--- a/libc/include/signal.h
+++ b/libc/include/signal.h
@@ -126,13 +126,17 @@
extern int sigwait(const sigset_t*, int*) __nonnull((1, 2));
extern int sighold(int)
- __attribute__((deprecated("use sigprocmask() or pthread_sigmask() instead"))) __INTRODUCED_IN(25);
-extern int sigignore(int) __attribute__((deprecated("use sigaction() instead"))) __INTRODUCED_IN(25);
-extern int sigpause(int) __attribute__((deprecated("use sigsuspend() instead"))) __INTRODUCED_IN(25);
+ __attribute__((deprecated("use sigprocmask() or pthread_sigmask() instead")))
+ __INTRODUCED_IN_FUTURE;
+extern int sigignore(int)
+ __attribute__((deprecated("use sigaction() instead"))) __INTRODUCED_IN_FUTURE;
+extern int sigpause(int)
+ __attribute__((deprecated("use sigsuspend() instead"))) __INTRODUCED_IN_FUTURE;
extern int sigrelse(int)
- __attribute__((deprecated("use sigprocmask() or pthread_sigmask() instead"))) __INTRODUCED_IN(25);
-extern sighandler_t sigset(int, sighandler_t) __attribute__((deprecated("use sigaction() instead")))
-__INTRODUCED_IN(25);
+ __attribute__((deprecated("use sigprocmask() or pthread_sigmask() instead")))
+ __INTRODUCED_IN_FUTURE;
+extern sighandler_t sigset(int, sighandler_t)
+ __attribute__((deprecated("use sigaction() instead"))) __INTRODUCED_IN_FUTURE;
extern int raise(int);
extern int kill(pid_t, int);
diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h
index f9c1a2a..b3e52d5 100644
--- a/libc/include/stdlib.h
+++ b/libc/include/stdlib.h
@@ -137,7 +137,7 @@
int ptsname_r(int, char*, size_t);
int unlockpt(int);
-int getsubopt(char**, char* const*, char**) __INTRODUCED_IN(25);
+int getsubopt(char**, char* const*, char**) __INTRODUCED_IN_FUTURE;
typedef struct {
int quot;
@@ -164,7 +164,7 @@
extern const char* getprogname(void) __INTRODUCED_IN(21);
extern void setprogname(const char*) __INTRODUCED_IN(21);
-int mblen(const char*, size_t) __INTRODUCED_IN(25);
+int mblen(const char*, size_t) __INTRODUCED_IN_FUTURE;
size_t mbstowcs(wchar_t*, const char*, size_t);
int mbtowc(wchar_t*, const char*, size_t) __INTRODUCED_IN(21);
int wctomb(char*, wchar_t) __INTRODUCED_IN(21);
diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h
index 24b341e..3fcf163 100644
--- a/libc/include/sys/cdefs.h
+++ b/libc/include/sys/cdefs.h
@@ -459,6 +459,8 @@
#define __DEPRECATED_IN(api_level) __AVAILABILITY(deprecated=api_level)
#define __REMOVED_IN(api_level) __AVAILABILITY(obsoleted=api_level)
+#define __INTRODUCED_IN_FUTURE __INTRODUCED_IN(10000)
+
#if __LP64__
#define __INTRODUCED_IN_32(api_level)
#define __INTRODUCED_IN_64 __INTRODUCED_IN
diff --git a/libc/include/sys/quota.h b/libc/include/sys/quota.h
index 85bb780..08ca982 100644
--- a/libc/include/sys/quota.h
+++ b/libc/include/sys/quota.h
@@ -40,7 +40,7 @@
__BEGIN_DECLS
-int quotactl(int, const char*, int, char*) __INTRODUCED_IN(25);
+int quotactl(int, const char*, int, char*) __INTRODUCED_IN_FUTURE;
__END_DECLS
diff --git a/libc/include/unistd.h b/libc/include/unistd.h
index 937a873..6b5ef76 100644
--- a/libc/include/unistd.h
+++ b/libc/include/unistd.h
@@ -288,8 +288,8 @@
__errordecl(__readlinkat_size_toobig_error, "readlinkat called with size > SSIZE_MAX");
extern ssize_t __readlinkat_real(int dirfd, const char*, char*, size_t) __RENAME(readlinkat);
-extern int getdomainname(char*, size_t) __INTRODUCED_IN(25);
-extern int setdomainname(const char*, size_t) __INTRODUCED_IN(25);
+extern int getdomainname(char*, size_t) __INTRODUCED_IN_FUTURE;
+extern int setdomainname(const char*, size_t) __INTRODUCED_IN_FUTURE;
#if defined(__BIONIC_FORTIFY)
diff --git a/libc/include/wctype.h b/libc/include/wctype.h
index 1db71b3..41e0ec3 100644
--- a/libc/include/wctype.h
+++ b/libc/include/wctype.h
@@ -51,8 +51,8 @@
wint_t towlower_l(int, locale_t) __INTRODUCED_IN(21);
wint_t towupper_l(int, locale_t) __INTRODUCED_IN(21);
-wint_t towctrans_l(wint_t, wctrans_t, locale_t) __INTRODUCED_IN(25);
-wctrans_t wctrans_l(const char*, locale_t) __INTRODUCED_IN(25);
+wint_t towctrans_l(wint_t, wctrans_t, locale_t) __INTRODUCED_IN_FUTURE;
+wctrans_t wctrans_l(const char*, locale_t) __INTRODUCED_IN_FUTURE;
wctype_t wctype_l(const char*, locale_t) __INTRODUCED_IN(21);
int iswctype_l(wint_t, wctype_t, locale_t) __INTRODUCED_IN(21);