2016-11-25 17:18:40 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the UCB release of Plan 9. It is subject to the license
|
|
|
|
* terms in the LICENSE file found in the top-level directory of this
|
|
|
|
* distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
|
|
|
|
* part of the UCB release of Plan 9, including this file, may be copied,
|
|
|
|
* modified, propagated, or distributed except according to the terms contained
|
|
|
|
* in the LICENSE file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* pANS stdio -- definitions
|
|
|
|
* The following names are defined in the pANS:
|
|
|
|
* FILE fpos_t _IOFBF _IOLBF _IONBF
|
|
|
|
* BUFSIZ EOF FOPEN_MAX FILENAME_MAX L_tmpnam
|
|
|
|
* SEEK_CUR SEEK_END SEEK_SET TMP_MAX stderr
|
|
|
|
* stdin stdout remove rename tmpfile
|
|
|
|
* tmpnam fclose fflush fopen freopen
|
|
|
|
* setbuf setvbuf fprintf fscanf printf
|
|
|
|
* scanf sprintf sscanf vfprintf vprintf
|
|
|
|
* vsprintf fgetc fgets fputc fputs
|
|
|
|
* getc getchar gets putc putchar
|
|
|
|
* puts ungetc fread fwrite fgetpos
|
|
|
|
* fseek fsetpos ftell rewind clearerr
|
|
|
|
* feof ferror perror
|
|
|
|
*
|
|
|
|
* (But plan9 version omits remove and rename, because they are in libc)
|
|
|
|
*/
|
|
|
|
#include <u.h>
|
2017-04-19 23:33:14 +02:00
|
|
|
#include <lib9.h>
|
2016-11-25 17:18:40 +01:00
|
|
|
#undef END
|
|
|
|
#include "Stdio.h"
|
|
|
|
/*
|
|
|
|
* Flag bits
|
|
|
|
*/
|
|
|
|
#define BALLOC 1 /* did stdio malloc fd->buf? */
|
|
|
|
#define LINEBUF 2 /* is stream line buffered? */
|
|
|
|
#define STRING 4 /* output to string, instead of file */
|
|
|
|
#define APPEND 8 /* append mode output */
|
|
|
|
/*
|
|
|
|
* States
|
|
|
|
*/
|
|
|
|
#define CLOSED 0 /* file not open */
|
|
|
|
#define OPEN 1 /* file open, but no I/O buffer allocated yet */
|
|
|
|
#define RDWR 2 /* open, buffer allocated, ok to read or write */
|
|
|
|
#define RD 3 /* open, buffer allocated, ok to read but not write */
|
|
|
|
#define WR 4 /* open, buffer allocated, ok to write but not read */
|
|
|
|
#define ERR 5 /* open, but an uncleared error occurred */
|
|
|
|
#define END 6 /* open, but at eof */
|
|
|
|
|
|
|
|
int _IO_setvbuf(FILE *);
|
|
|
|
|
|
|
|
/* half hearted attempt to make multi threaded */
|
|
|
|
extern QLock _stdiolk;
|