Author: wmb Date: 2008-09-02 23:18:01 +0200 (Tue, 02 Sep 2008) New Revision: 915
Modified: clients/lib/lib.c clients/lib/stdio.h Log: Client library stdio - pay attention to "read only" open mode, and don't flush the buffer if it's not dirty.
Modified: clients/lib/lib.c =================================================================== --- clients/lib/lib.c 2008-09-02 05:46:14 UTC (rev 914) +++ clients/lib/lib.c 2008-09-02 21:18:01 UTC (rev 915) @@ -111,6 +111,8 @@ }
good: + fp->dirty = 0; + fp->readonly = (strcmp(mode, "r") == 0) || (strcmp(mode, "rb") == 0); fp->bufc = 0; return(fp); } @@ -121,26 +123,33 @@ return(0); /* Implement me */ }
-void +int fputc(char c, FILE *fp) { + if (fp->readonly) + return -1; // EOF + if (fp == stdout && c == '\n') - fputc('\r', fp); + (void) fputc('\r', fp);
fp->buf[fp->bufc++] = c; + fp->dirty = 1;
if ((fp->bufc == 127) || (fp == stdout && c == '\n')) { OFWrite(fp->id, fp->buf, fp->bufc); fp->bufc = 0; + fp->dirty = 0; } + return (int)c; }
void fflush (FILE *fp) { - if (fp->bufc != 0) { + if (fp->dirty && fp->bufc != 0) { OFWrite(fp->id, fp->buf, fp->bufc); fp->bufc = 0; + fp->dirty = 0; } }
Modified: clients/lib/stdio.h =================================================================== --- clients/lib/stdio.h 2008-09-02 05:46:14 UTC (rev 914) +++ clients/lib/stdio.h 2008-09-02 21:18:01 UTC (rev 915) @@ -3,6 +3,8 @@ typedef struct _file { long id; int bufc; + int readonly; + int dirty; char *inbufp; char buf[128]; } FILE;
openfirmware@openfirmware.info