/* A GNU-like . Copyright (C) 2004, 2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if defined __need_FILE || defined __need___FILE /* Special invocation convention inside glibc header files. */ #include @ABSOLUTE_STDIO_H@ #else /* Normal invocation convention. */ #ifndef _GL_STDIO_H #define _GL_STDIO_H #include @ABSOLUTE_STDIO_H@ #include #include #ifndef __attribute__ /* This feature is available in gcc versions 2.5 and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ # define __attribute__(Spec) /* empty */ # endif /* The __-protected variants of `format' and `printf' attributes are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) # define __format__ format # define __printf__ printf # endif #endif /* The definition of GL_LINK_WARNING is copied here. */ #ifdef __cplusplus extern "C" { #endif #if @GNULIB_FPRINTF_POSIX@ # if @REPLACE_FPRINTF@ # define fprintf rpl_fprintf extern int fprintf (FILE *fp, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3))); # endif #elif defined GNULIB_POSIXCHECK # undef fprintf # define fprintf \ (GL_LINK_WARNING ("fprintf is not always POSIX compliant - " \ "use gnulib module fprintf-posix for portable " \ "POSIX compliance"), \ fprintf) #endif #if @GNULIB_VFPRINTF_POSIX@ # if @REPLACE_VFPRINTF@ # define vfprintf rpl_vfprintf extern int vfprintf (FILE *fp, const char *format, va_list args) __attribute__ ((__format__ (__printf__, 2, 0))); # endif #elif defined GNULIB_POSIXCHECK # undef vfprintf # define vfprintf(s,f,a) \ (GL_LINK_WARNING ("vfprintf is not always POSIX compliant - " \ "use gnulib module vfprintf-posix for portable " \ "POSIX compliance"), \ vfprintf (s, f, a)) #endif #if @GNULIB_PRINTF_POSIX@ # if @REPLACE_PRINTF@ /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ extern int printf (const char *format, ...) __attribute__ ((__format__ (__printf__, 1, 2))); # endif #elif defined GNULIB_POSIXCHECK # undef printf # define printf \ (GL_LINK_WARNING ("printf is not always POSIX compliant - " \ "use gnulib module printf-posix for portable " \ "POSIX compliance"), \ printf) /* Don't break __attribute__((format(printf,M,N))). */ # define format(kind,m,n) format (__##kind##__, m, n) # define __format__(kind,m,n) __format__ (__##kind##__, m, n) # define ____printf____ __printf__ # define ____scanf____ __scanf__ # define ____strftime____ __strftime__ # define ____strfmon____ __strfmon__ #endif #if @GNULIB_VPRINTF_POSIX@ # if @REPLACE_VPRINTF@ # define vprintf rpl_vprintf extern int vprintf (const char *format, va_list args) __attribute__ ((__format__ (__printf__, 1, 0))); # endif #elif defined GNULIB_POSIXCHECK # undef vprintf # define vprintf(f,a) \ (GL_LINK_WARNING ("vprintf is not always POSIX compliant - " \ "use gnulib module vprintf-posix for portable " \ "POSIX compliance"), \ vprintf (f, a)) #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # define snprintf rpl_snprintf # endif # if @REPLACE_SNPRINTF@ || !@HAVE_DECL_SNPRINTF@ extern int snprintf (char *str, size_t size, const char *format, ...) __attribute__ ((__format__ (__printf__, 3, 4))); # endif #elif defined GNULIB_POSIXCHECK # undef snprintf # define snprintf \ (GL_LINK_WARNING ("snprintf is unportable - " \ "use gnulib module snprintf for portability"), \ snprintf) #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # define vsnprintf rpl_vsnprintf # endif # if @REPLACE_VSNPRINTF@ || !@HAVE_DECL_VSNPRINTF@ extern int vsnprintf (char *str, size_t size, const char *format, va_list args) __attribute__ ((__format__ (__printf__, 3, 0))); # endif #elif defined GNULIB_POSIXCHECK # undef vsnprintf # define vsnprintf(b,s,f,a) \ (GL_LINK_WARNING ("vsnprintf is unportable - " \ "use gnulib module vsnprintf for portability"), \ vsnprintf (b, s, f, a)) #endif #if @GNULIB_SPRINTF_POSIX@ # if @REPLACE_SPRINTF@ # define sprintf rpl_sprintf extern int sprintf (char *str, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3))); # endif #elif defined GNULIB_POSIXCHECK # undef sprintf # define sprintf \ (GL_LINK_WARNING ("sprintf is not always POSIX compliant - " \ "use gnulib module sprintf-posix for portable " \ "POSIX compliance"), \ sprintf) #endif #if @GNULIB_VSPRINTF_POSIX@ # if @REPLACE_VSPRINTF@ # define vsprintf rpl_vsprintf extern int vsprintf (char *str, const char *format, va_list args) __attribute__ ((__format__ (__printf__, 2, 0))); # endif #elif defined GNULIB_POSIXCHECK # undef vsprintf # define vsprintf(b,f,a) \ (GL_LINK_WARNING ("vsprintf is not always POSIX compliant - " \ "use gnulib module vsprintf-posix for portable " \ "POSIX compliance"), \ vsprintf (b, f, a)) #endif #if @GNULIB_VASPRINTF@ # if @REPLACE_VASPRINTF@ # define asprintf rpl_asprintf # define vasprintf rpl_vasprintf # endif # if @REPLACE_VASPRINTF@ || !@HAVE_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in *RESULT and return the number of resulting bytes, excluding the trailing NUL. Upon memory allocation error, or some other error, return -1. */ extern int asprintf (char **result, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3))); extern int vasprintf (char **result, const char *format, va_list args) __attribute__ ((__format__ (__printf__, 2, 0))); # endif #endif #ifdef __cplusplus } #endif #endif /* _GL_STDIO_H */ #endif