X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=includes%2Fstdio.h;h=0d28ce7468a5df9f8e9ddbaaca34903517ce8d77;hp=8f818968892285567b12b5d7c7e40a99d0908810;hb=da0f3f353d417fed71f358a48d5d5394145e460d;hpb=0a419d48138f1411d6e3e50a367b9ece5a2cf893 diff --git a/includes/stdio.h b/includes/stdio.h index 8f81896..0d28ce7 100644 --- a/includes/stdio.h +++ b/includes/stdio.h @@ -1,6 +1,4 @@ -/* $Id$ */ - -/* 7.19 Input/output +/* Input/output This file is part of the Public Domain C Library (PDCLib). Permission is granted to use, modify, and / or redistribute at will. @@ -8,8 +6,11 @@ #ifndef _PDCLIB_STDIO_H #define _PDCLIB_STDIO_H _PDCLIB_STDIO_H -#include <_PDCLIB_int.h> -_PDCLIB_BEGIN_EXTERN_C +#include "_PDCLIB_int.h" + +#ifdef __cplusplus +extern "C" { +#endif #ifndef _PDCLIB_SIZE_T_DEFINED #define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED @@ -36,7 +37,7 @@ typedef _PDCLIB_file_t FILE; #define L_tmpnam _PDCLIB_L_tmpnam #define TMP_MAX _PDCLIB_TMP_MAX -/* See fseek(), third argument +/* See fseek(), third argument * * Some system headers (e.g. windows) also define the SEEK_* values. Check for * this and validate that they're the same value @@ -74,7 +75,7 @@ extern FILE * stderr; int remove( const char * filename ) _PDCLIB_nothrow; /* Rename the given old file to the given new name. - Returns zero if successful, non-zero otherwise. + Returns zero if successful, non-zero otherwise. This implementation does detect if the old filename corresponds to an open file, and fails the rename in this case. If there already is a file with the new filename, behaviour is defined by @@ -171,13 +172,13 @@ int fflush( FILE * stream ) _PDCLIB_nothrow; Returns a pointer to the stream handle if successfull, NULL otherwise. */ -FILE * fopen( const char * _PDCLIB_restrict filename, +FILE * fopen( const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode ) _PDCLIB_nothrow; /* Creates a stream connected to the file descriptor \p fd with mode \p mode. Mode must match the mode with which the file descriptor was opened. */ -FILE * _PDCLIB_fvopen( _PDCLIB_fd_t fd, const _PDCLIB_fileops_t * ops, +FILE * _PDCLIB_fvopen( _PDCLIB_fd_t fd, const _PDCLIB_fileops_t * ops, int mode, const char * filename ) _PDCLIB_nothrow; /* Close any file currently associated with the given stream. Open the file @@ -691,7 +692,7 @@ int getchar( void ) _PDCLIB_nothrow; and NULL is returned. If a read error occurs, the contents of s are indeter- minate, and NULL is returned. - This function is dangerous and has been a great source of security + This function is dangerous and has been a great source of security vulnerabilities. Do not use it. It was removed by C11. */ char * gets( char * s ) _PDCLIB_DEPRECATED _PDCLIB_nothrow; @@ -823,7 +824,7 @@ int ferror( FILE * stream ) _PDCLIB_nothrow; */ void perror( const char * s ) _PDCLIB_nothrow; -/* Unlocked I/O +/* Unlocked I/O * * Since threading was introduced in C11, FILE objects have had implicit locks * to prevent data races and inconsistent output. @@ -835,38 +836,50 @@ void perror( const char * s ) _PDCLIB_nothrow; * the behaviour of the _unlocked variant is the same except that it will not * take the lock associated with the stream. * - * flockfile, ftrylockfile and funlockfile can be used to manually manipulate + * flockfile, ftrylockfile and funlockfile can be used to manually manipulate * the stream locks. The behaviour of the _unlocked functions if called when the * stream isn't locked by the calling thread is implementation defined. */ #if _PDCLIB_POSIX_MIN(200112L) || _PDCLIB_BSD_SOURCE || _PDCLIB_SVID_SOURCE -void flockfile(FILE *file); -int ftrylockfile(FILE *file); -void funlockfile(FILE *file); - -int getc_unlocked(FILE *stream); -int getchar_unlocked(void); -int putc_unlocked(int c, FILE *stream); -int putchar_unlocked(int c); +void flockfile(FILE *file) _PDCLIB_nothrow; +int ftrylockfile(FILE *file) _PDCLIB_nothrow; +void funlockfile(FILE *file) _PDCLIB_nothrow; + +int getc_unlocked(FILE *stream) _PDCLIB_nothrow; +int getchar_unlocked(void) _PDCLIB_nothrow; +int putc_unlocked(int c, FILE *stream) _PDCLIB_nothrow; +int putchar_unlocked(int c) _PDCLIB_nothrow; #endif #if _PDCLIB_BSD_SOURCE || _PDCLIB_SVID_SOURCE -void clearerr_unlocked(FILE *stream); -int feof_unlocked(FILE *stream); -int ferror_unlocked(FILE *stream); -int fflush_unlocked(FILE *stream); -int fgetc_unlocked(FILE *stream); -int fputc_unlocked(int c, FILE *stream); -size_t fread_unlocked(void *ptr, size_t size, size_t n, FILE *stream); -size_t fwrite_unlocked(const void *ptr, size_t size, size_t n, FILE *stream); +void clearerr_unlocked(FILE *stream) _PDCLIB_nothrow; +int feof_unlocked(FILE *stream) _PDCLIB_nothrow; +int ferror_unlocked(FILE *stream) _PDCLIB_nothrow; +int fflush_unlocked(FILE *stream) _PDCLIB_nothrow; +int fgetc_unlocked(FILE *stream) _PDCLIB_nothrow; +int fputc_unlocked(int c, FILE *stream) _PDCLIB_nothrow; +size_t fread_unlocked(void *ptr, size_t size, size_t n, FILE *stream) _PDCLIB_nothrow; +size_t fwrite_unlocked(const void *ptr, size_t size, size_t n, FILE *stream) _PDCLIB_nothrow; #endif #if _PDCLIB_GNU_SOURCE -char *fgets_unlocked(char *s, int n, FILE *stream); -int fputs_unlocked(const char *s, FILE *stream); +char *fgets_unlocked(char *s, int n, FILE *stream) _PDCLIB_nothrow; +int fputs_unlocked(const char *s, FILE *stream) _PDCLIB_nothrow; #endif -#if defined(_PDCLIB_EXTENSIONS) +#if _PDCLIB_EXTENSIONS +int _vcbprintf( + void *p, + _PDCLIB_size_t ( *cb ) ( void *p, const char *buf, _PDCLIB_size_t size ), + const char *format, + _PDCLIB_va_list arg ); + +int _cbprintf( + void *p, + size_t ( *cb ) ( void *p, const char *buf, size_t size ), + const char *format, + ... ); + int fgetpos_unlocked( FILE * _PDCLIB_restrict stream, fpos_t * _PDCLIB_restrict pos ) _PDCLIB_nothrow; int fsetpos_unlocked( FILE * stream, const fpos_t * pos ) _PDCLIB_nothrow; long int ftell_unlocked( FILE * stream ) _PDCLIB_nothrow; @@ -876,7 +889,6 @@ void rewind_unlocked( FILE * stream ) _PDCLIB_nothrow; int puts_unlocked( const char * s ) _PDCLIB_nothrow; int ungetc_unlocked( int c, FILE * stream ) _PDCLIB_nothrow; - int printf_unlocked( const char * _PDCLIB_restrict format, ... ) _PDCLIB_nothrow; int vprintf_unlocked( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ) _PDCLIB_nothrow; int fprintf_unlocked( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ) _PDCLIB_nothrow; @@ -886,11 +898,13 @@ int vscanf_unlocked( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ) int fscanf_unlocked( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ) _PDCLIB_nothrow; int vfscanf_unlocked( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ) _PDCLIB_nothrow; - // Todo: remove prefix? _PDCLIB_uint_fast64_t _PDCLIB_ftell64( FILE * stream ) _PDCLIB_nothrow; _PDCLIB_uint_fast64_t _PDCLIB_ftell64_unlocked( FILE * stream ) _PDCLIB_nothrow; #endif -_PDCLIB_END_EXTERN_C +#ifdef __cplusplus +} +#endif + #endif