Add support for the new ENVIRON opton
[unix-history] / usr / src / include / stdio.h
index a29ed59..6a5d182 100644 (file)
@@ -1,31 +1,52 @@
 /*-
 /*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * This code is derived from software contributed to Berkeley by
  * Chris Torek.
  *
  * %sccs.include.redist.c%
  *
  *
  * This code is derived from software contributed to Berkeley by
  * Chris Torek.
  *
  * %sccs.include.redist.c%
  *
- *     @(#)stdio.h     5.13 (Berkeley) %G%
+ *     @(#)stdio.h     8.1 (Berkeley) %G%
  */
 
 #ifndef        _STDIO_H_
 #define        _STDIO_H_
 
  */
 
 #ifndef        _STDIO_H_
 #define        _STDIO_H_
 
+#if !defined(_ANSI_SOURCE) && !defined(__STRICT_ANSI__)
+#include <sys/types.h>
+#endif
+
 #include <sys/cdefs.h>
 
 #include <sys/cdefs.h>
 
-#include <machine/types.h>
-#ifdef _SIZE_T_
-typedef        _SIZE_T_        size_t;
-#undef _SIZE_T_
+#include <machine/ansi.h>
+#ifdef _BSD_SIZE_T_
+typedef        _BSD_SIZE_T_    size_t;
+#undef _BSD_SIZE_T_
 #endif
 
 #ifndef NULL
 #define        NULL    0
 #endif
 
 #endif
 
 #ifndef NULL
 #define        NULL    0
 #endif
 
-typedef long fpos_t;           /* Must match off_t <sys/types.h> */
+/*
+ * This is fairly grotesque, but pure ANSI code must not inspect the
+ * innards of an fpos_t anyway.  The library internally uses off_t,
+ * which we assume is exactly as big as eight chars.  (When we switch
+ * to gcc 2.4 we will use __attribute__ here.)
+ *
+ * WARNING: the alignment constraints on an off_t and the struct below
+ * differ on (e.g.) the SPARC.  Hence, the placement of an fpos_t object
+ * in a structure will change if fpos_t's are not aligned on 8-byte
+ * boundaries.  THIS IS A CROCK, but for now there is no way around it.
+ */
+#if !defined(_ANSI_SOURCE) && !defined(__STRICT_ANSI__)
+typedef off_t fpos_t;
+#else
+typedef struct __sfpos {
+       char    _pos[8];
+} fpos_t;
+#endif
 
 #define        _FSTDIO                 /* Define for new stdio with functions. */
 
 
 #define        _FSTDIO                 /* Define for new stdio with functions. */
 
@@ -64,6 +85,8 @@ struct __sbuf {
  * that does not match the previous one in _bf.  When this happens,
  * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
  * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
  * that does not match the previous one in _bf.  When this happens,
  * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
  * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
+ *
+ * NB: see WARNING above before changing the layout of this structure!
  */
 typedef        struct __sFILE {
        unsigned char *_p;      /* current position in (some) buffer */
  */
 typedef        struct __sFILE {
        unsigned char *_p;      /* current position in (some) buffer */
@@ -95,7 +118,7 @@ typedef      struct __sFILE {
 
        /* Unix stdio files get aligned to block boundaries on fseek() */
        int     _blksize;       /* stat.st_blksize (may be != _bf._size) */
 
        /* Unix stdio files get aligned to block boundaries on fseek() */
        int     _blksize;       /* stat.st_blksize (may be != _bf._size) */
-       int     _offset;        /* current lseek offset */
+       fpos_t  _offset;        /* current lseek offset (see WARNING) */
 } FILE;
 
 __BEGIN_DECLS
 } FILE;
 
 __BEGIN_DECLS
@@ -179,16 +202,20 @@ FILE      *fopen __P((const char *, const char *));
 int     fprintf __P((FILE *, const char *, ...));
 int     fputc __P((int, FILE *));
 int     fputs __P((const char *, FILE *));
 int     fprintf __P((FILE *, const char *, ...));
 int     fputc __P((int, FILE *));
 int     fputs __P((const char *, FILE *));
-int     fread __P((void *, size_t, size_t, FILE *));
+size_t  fread __P((void *, size_t, size_t, FILE *));
 FILE   *freopen __P((const char *, const char *, FILE *));
 int     fscanf __P((FILE *, const char *, ...));
 int     fseek __P((FILE *, long, int));
 int     fsetpos __P((FILE *, const fpos_t *));
 long    ftell __P((const FILE *));
 FILE   *freopen __P((const char *, const char *, FILE *));
 int     fscanf __P((FILE *, const char *, ...));
 int     fseek __P((FILE *, long, int));
 int     fsetpos __P((FILE *, const fpos_t *));
 long    ftell __P((const FILE *));
-int     fwrite __P((const void *, size_t, size_t, FILE *));
+size_t  fwrite __P((const void *, size_t, size_t, FILE *));
 int     getc __P((FILE *));
 int     getchar __P((void));
 char   *gets __P((char *));
 int     getc __P((FILE *));
 int     getchar __P((void));
 char   *gets __P((char *));
+#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
+extern int sys_nerr;                   /* perror(3) external variables */
+extern const char *const sys_errlist[];
+#endif
 void    perror __P((const char *));
 int     printf __P((const char *, ...));
 int     putc __P((int, FILE *));
 void    perror __P((const char *));
 int     printf __P((const char *, ...));
 int     putc __P((int, FILE *));
@@ -201,13 +228,13 @@ int        scanf __P((const char *, ...));
 void    setbuf __P((FILE *, char *));
 int     setvbuf __P((FILE *, char *, int, size_t));
 int     sprintf __P((char *, const char *, ...));
 void    setbuf __P((FILE *, char *));
 int     setvbuf __P((FILE *, char *, int, size_t));
 int     sprintf __P((char *, const char *, ...));
-int     sscanf __P((char *, const char *, ...));
+int     sscanf __P((const char *, const char *, ...));
 FILE   *tmpfile __P((void));
 char   *tmpnam __P((char *));
 int     ungetc __P((int, FILE *));
 FILE   *tmpfile __P((void));
 char   *tmpnam __P((char *));
 int     ungetc __P((int, FILE *));
-int     vfprintf __P((FILE *, const char *, _VA_LIST_));
-int     vprintf __P((const char *, _VA_LIST_));
-int     vsprintf __P((char *, const char *, _VA_LIST_));
+int     vfprintf __P((FILE *, const char *, _BSD_VA_LIST_));
+int     vprintf __P((const char *, _BSD_VA_LIST_));
+int     vsprintf __P((char *, const char *, _BSD_VA_LIST_));
 __END_DECLS
 
 /*
 __END_DECLS
 
 /*
@@ -239,9 +266,19 @@ void        setbuffer __P((FILE *, char *, int));
 int     setlinebuf __P((FILE *));
 char   *tempnam __P((const char *, const char *));
 int     snprintf __P((char *, size_t, const char *, ...));
 int     setlinebuf __P((FILE *));
 char   *tempnam __P((const char *, const char *));
 int     snprintf __P((char *, size_t, const char *, ...));
-int     vsnprintf __P((char *, size_t, const char *, _VA_LIST_));
+int     vsnprintf __P((char *, size_t, const char *, _BSD_VA_LIST_));
+int     vscanf __P((const char *, _BSD_VA_LIST_));
+int     vsscanf __P((const char *, const char *, _BSD_VA_LIST_));
+FILE   *zopen __P((const char *, const char *, int));
 __END_DECLS
 
 __END_DECLS
 
+/*
+ * This is a #define because the function is used internally and
+ * (unlike vfscanf) the name __svfscanf is guaranteed not to collide
+ * with a user function when _ANSI_SOURCE or _POSIX_SOURCE is defined.
+ */
+#define         vfscanf        __svfscanf
+
 /*
  * Stdio function-access interface.
  */
 /*
  * Stdio function-access interface.
  */
@@ -261,6 +298,7 @@ __END_DECLS
  */
 __BEGIN_DECLS
 int    __srget __P((FILE *));
  */
 __BEGIN_DECLS
 int    __srget __P((FILE *));
+int    __svfscanf __P((FILE *, const char *, _BSD_VA_LIST_));
 int    __swbuf __P((int, FILE *));
 __END_DECLS
 
 int    __swbuf __P((int, FILE *));
 __END_DECLS
 
@@ -269,7 +307,7 @@ __END_DECLS
  * define function versions in the C library.
  */
 #define        __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
  * define function versions in the C library.
  */
 #define        __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
-#ifdef __GNUC__
+#if defined(__GNUC__) && defined(__STDC__)
 static __inline int __sputc(int _c, FILE *_p) {
        if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
                return (*_p->_p++ = _c);
 static __inline int __sputc(int _c, FILE *_p) {
        if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
                return (*_p->_p++ = _c);